docs: def zmq_device(self):
          '''
          Multiprocessing target for the zmq queue device
          '''
          self.__setup_signals()
          salt.utils.process.appendproctitle('MWorkerQueue')
          self.context = zmq.Context(self.opts['worker_threads'])
          # Prepare the zeromq sockets
          self.uri = 'tcp://{interface}:{ret_port}'.format(**self.opts)
          self.clients = self.context.socket(zmq.ROUTER)
          if self.opts['ipv6'] is True and hasattr(zmq, 'IPV4ONLY'):
              # IPv6 sockets work for both IPv6 and IPv4 addresses
              self.clients.setsockopt(zmq.IPV4ONLY, 0)
          self.clients.setsockopt(zmq.BACKLOG, self.opts.get('zmq_backlog', 1000))
          self._start_zmq_monitor()
          self.workers = self.context.socket(zmq.DEALER)
  
          if self.opts.get('ipc_mode', '') == 'tcp':
              self.w_uri = 'tcp://127.0.0.1:{0}'.format(
                  self.opts.get('tcp_master_workers', 4515)
                  )
          else:
              self.w_uri = 'ipc://{0}'.format(
                  os.path.join(self.opts['sock_dir'], 'workers.ipc')
                  )
  
          log.info('Setting up the master communication server')
          self.clients.bind(self.uri)
          self.workers.bind(self.w_uri)
  
          while True:
              if self.clients.closed or self.workers.closed:
                  break
              try:
                  zmq.device(zmq.QUEUE, self.clients, self.workers)
              except zmq.ZMQError as exc:
                  if exc.errno == errno.EINTR:
                      continue
                  raise exc
              except (KeyboardInterrupt, SystemExit):
                  break