code: async def start(self):
          
          self._is_running = True
  
          while self._is_running:
              try:
                  zmq_msg = await self._socket.recv_multipart()
  
                  message = Message()
                  message.ParseFromString(zmq_msg[-1])
  
                  await self._msg_router.route_msg(message)
              except DecodeError as e:
                  LOGGER.warning('Unable to decode: %s', e)
              except zmq.ZMQError as e:
                  LOGGER.warning('Unable to receive: %s', e)
                  return
              except asyncio.CancelledError:
                  self._is_running = False
docs: Starts receiving messages on the underlying socket and passes them
          to the message router.