[zeromq-dev] Debugging "No route to host" when sending over ROUTER
Greg Ward
greg at gerg.ca
Tue Dec 17 19:49:24 CET 2013
On 17 December 2013, I said:
> Unfortunately, I'm getting lots of "No route to host" (EHOSTUNREACH)
> errors trying to send messages over a ROUTER socket.
I think I may have found my problem.
> The 0MQ layer doesn't expose 0MQ IDs to its clients. Instead, every
> node has a human-readable name which is included in every message.
> When the server *receives* a message over the ROUTER, it saves the 0MQ
> ID in a map:
>
> msg = self.sock_in.recv_multipart()
> (zmq_id, source, cdata) = msg
> if source not in self.zmq_id_map:
> logger.debug('recv: setting zmq_id_map[%r] = %r', source, zmq_id)
> self.zmq_id_map[source] = zmq_id
It's here: I need to update zmq_id_map on every single incoming
message, not just on messages from clients we have not seen before.
Apparently the 0MQ ID can change behind the scenes. This makes sense
if a client reconnects: new OS-level socket, new ID. I'm not sure if
that's what's happening every time, but it definitely *can* happen.
Anyways, now my code looks like
msg = self.sock_in.recv_multipart()
(zmq_id, source, cdata) = msg
logger.debug('recv: setting zmq_id_map[%r] = %r', source, zmq_id)
self.zmq_id_map[source] = zmq_id
and I'm no longer seeing "No route to host" errors from my server
process. So far. ;-)
Greg
More information about the zeromq-dev
mailing list