docs: def _setup_ipc(self):
          '''
          Subscribe to the right topic
          in the device IPC and publish to the
          publisher proxy.
          '''
          self.ctx = zmq.Context()
          # subscribe to device IPC
          log.debug('Creating the dealer IPC for %s', self._name)
          self.sub = self.ctx.socket(zmq.DEALER)
          if six.PY2:
              self.sub.setsockopt(zmq.IDENTITY, self._name)
          elif six.PY3:
              self.sub.setsockopt(zmq.IDENTITY, bytes(self._name, 'utf-8'))
          try:
              self.sub.setsockopt(zmq.HWM, self.opts['hwm'])
              # zmq 2
          except AttributeError:
              # zmq 3
              self.sub.setsockopt(zmq.RCVHWM, self.opts['hwm'])
          # subscribe to the corresponding IPC pipe
          self.sub.connect(DEV_IPC_URL)
          # publish to the publisher IPC
          self.pub = self.ctx.socket(zmq.PUB)
          self.pub.connect(PUB_PX_IPC_URL)
          try:
              self.pub.setsockopt(zmq.HWM, self.opts['hwm'])
              # zmq 2
          except AttributeError:
              # zmq 3
              self.pub.setsockopt(zmq.SNDHWM, self.opts['hwm'])