docs: def start(self):
          '''
          Perform the work necessary to start up a Tornado IPC server
  
          Blocks until socket is established
          '''
          # Start up the ioloop
          log.trace('IPCMessagePublisher: binding to socket: %s', self.socket_path)
          if isinstance(self.socket_path, int):
              self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
              self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
              if self.opts.get('ipc_so_sndbuf'):
                  self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF, self.opts['ipc_so_sndbuf'])
              if self.opts.get('ipc_so_rcvbuf'):
                  self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF, self.opts['ipc_so_rcvbuf'])
              self.sock.setblocking(0)
              self.sock.bind(('127.0.0.1', self.socket_path))
              # Based on default used in tornado.netutil.bind_sockets()
              self.sock.listen(self.opts['ipc_so_backlog'])
          else:
              # sndbuf/rcvbuf does not apply to unix sockets
              self.sock = tornado.netutil.bind_unix_socket(self.socket_path, backlog=self.opts['ipc_so_backlog'])
  
          with salt.utils.asynchronous.current_ioloop(self.io_loop):
              tornado.netutil.add_accept_handler(
                  self.sock,
                  self.handle_connection,
              )
          self._started = True