[zeromq-dev] czmq v3.0.0: zsys_set_logsender, bind vs connect issue - tentative patch

Michael Haberler mail17 at mah.priv.at
Wed May 20 07:52:35 CEST 2015


czmq: zsys_set_logsender() currently zmq_bind()s to an endpoint.

That is fine in the inproc testcase as per zsys.c but fails if one has several processes which would like to log over an IPC socket, to say an existing log daemon. In this case the a second process doing zsys_set_logsender(ipc endpoint) fails the bind:

        //  Bind to specified endpoint
        int rc = zmq_bind (s_logsender, endpoint);
        assert (rc == 0);  <------ fail

this would work if zsys_set_logsender() did a connect instead, and only the log subscriber did a bind.


the following tentative patch cures the issue - should I prepare a PR?

@@ -1315,11 +1315,11 @@ zsys_set_logsender (const char *endpoint)
         if (!s_logsender) {
             s_logsender = zsys_socket (ZMQ_PUB, NULL, 0);
             assert (s_logsender);
         }
         //  Bind to specified endpoint
-        int rc = zmq_bind (s_logsender, endpoint);
+        int rc = zmq_connect (s_logsender, endpoint);
         assert (rc == 0);
     }
     else
     if (s_logsender) {
         zsys_close (s_logsender, NULL, 0);
@@ -1551,11 +1551,11 @@ zsys_test (bool verbose)
     //  Test logging system
     zsys_set_logident ("czmq_selftest");
     zsys_set_logsender ("inproc://logging");
     void *logger = zsys_socket (ZMQ_SUB, NULL, 0);
     assert (logger);
-    rc = zsocket_connect (logger, "inproc://logging");
+    rc = zsocket_bind (logger, "inproc://logging");
     assert (rc == 0);
     rc = zmq_setsockopt (logger, ZMQ_SUBSCRIBE, "", 0);
     assert (rc == 0);
 
     if (verbose) {





More information about the zeromq-dev mailing list