Hello, I have a couple of threads that communicate via inproc:// PUSH/PULL sockets. The communication pattern does not map well to the order of thread creation, and out of convenience I have producer thread connecting to its PUSH socket before consumer thread has bound the PULL socket.
There is a note in the documentation [1], saying that for inproc:// transport binding should be done before connecting. But that seems to work fine for me. I just left a comment in the code that this may cause some pain as a reminder, and decided not to fix what's not broken. Today I had a broken communication issue, and the first suspect was this ordering of binding/connecting. Eventually I figured out that the problem was not related to ZMQ, but in the process did some digging in the code. In zmq::socket_base_t::bind() there is this piece of code: if (protocol == "inproc") { const endpoint_t endpoint = { this, options }; rc = register_endpoint (addr_, endpoint); if (rc == 0) { connect_pending (addr_, this); ... This seems to assume that there can be pending connections to an unbound inproc:// socket. Is the note in documentation still relevant? Are there some potential problems with doing zmq_connect() before zmq_bind()? [1] http://api.zeromq.org/4-2:zmq-connect Regards, Mykola
_______________________________________________ zeromq-dev mailing list zeromq-dev@lists.zeromq.org https://lists.zeromq.org/mailman/listinfo/zeromq-dev