[zeromq-dev] Asynchronous client-to-server (DEALER to ROUTER) without czmq - assert on bind

Laurent Alebarde l.alebarde at free.fr
Tue Oct 15 12:49:59 CEST 2013


Thanks Pieter. My problem came from I forgot to configure the debugger 
for multithreading.

I have one question please : is it "legal" to use a PUB socket without a 
poller ? In my test, I receive nothing.

Here is a code excerpt :

static void
server_worker (void *ctx)
{
     void *worker = zmq_socket (ctx, ZMQ_DEALER);
     assert (worker);
     int rc = zmq_connect (worker, "inproc://backend");
     assert (rc == 0);

     // Control socket receives terminate command from main over inproc
*void *control = zmq_socket (ctx, ZMQ_SUB);*
     assert (control);
*rc = zmq_setsockopt (control, ZMQ_SUBSCRIBE, "", 0);*
     assert (rc == 0);
*rc = zmq_connect (control, "inproc://control");*
     assert (rc == 0);

     char content [CONTENT_SIZE_MAX]; //    bigger than what we need to 
check that
     char identity [ID_SIZE_MAX];      // the size received is the size sent

     bool run = true;
     while (run) {
*rc = zmq_recv (control, content, CONTENT_SIZE_MAX, ZMQ_DONTWAIT);*
         if (!rc) {
             if (is_verbose) printf("server_worker receives command = 
%s\n", content);
             if (memcmp (content, "TERMINATE", 10) == 0)
                 run = false;
         }

         // The DEALER socket gives us the reply envelope and message
         rc = zmq_recv (worker, identity, ID_SIZE_MAX, 0);
         assert (rc == ID_SIZE);
         rc = zmq_recv (worker, content, CONTENT_SIZE_MAX, 0);
         assert (rc == CONTENT_SIZE);
         if (is_verbose) printf("server receive - identity = %s    
content = %s\n", identity, content);

In main :

int main (void)
{
     setup_test_environment ();
     void* threads [QT_CLIENTS + 1];
     for (int i = 0; i < QT_CLIENTS; i++)
     {
         threads[i] = zmq_threadstart  (&client_task, NULL);
     }
     threads[QT_CLIENTS] = zmq_threadstart  (&server_task, NULL);
     sleep (5); // Run for 5 seconds then quit

     void *ctx = zmq_ctx_new ();
     assert (ctx);
     // Control socket receives terminate command from main over inproc
*void *control = zmq_socket (ctx, ZMQ_PUB);*
     assert (control);
*int rc = zmq_bind (control, "inproc://control");*
     assert (rc == 0);
     for (int i = 0; i < 100; i++) {
*rc = zmq_send (control, "TERMINATE", 10, 0);*
         assert (rc == 10);
     }

     for (int i = 0; i < QT_CLIENTS + 1; i++)
         zmq_threadclose (threads[i]);
     rc = zmq_close (control);
     assert (rc == 0);
     rc = zmq_ctx_term (ctx);
     assert (rc == 0);
     return 0;
}

Le 14/10/2013 17:23, Pieter Hintjens a écrit :
> You should include just <zmq.h>.
>
> Line 59 is the bind, anyhow...
>
> On Mon, Oct 14, 2013 at 5:14 PM, Laurent Alebarde <l.alebarde at free.fr> wrote:
>> Thanks Pieter. In fact, the problem is strange and comes as soon as the
>> creation of the socket. But I think I have a build issue. You know, IDE
>> comfort ;-) .
>>
>>
>> Le 14/10/2013 16:55, Pieter Hintjens a écrit :
>>
>> You can't bind to a hostname. Use 127.0.0.1 instead.
>>
>> On Mon, Oct 14, 2013 at 4:52 PM, Laurent Alebarde <l.alebarde at free.fr>
>> wrote:
>>
>> I am trying to adapt the Guide's "Asynchronous client-to-server (DEALER to
>> ROUTER)" in a non czmq version, but it fails when it binds or connects. Here
>> is my code.
>>
>> libzmq_test: ../tests/async_client_to_server_no_czmq.cpp:59: void
>> server_task(void*): Assertion `rc == 0' failed.
>>
>> On its side, the client fails too.
>>
>> I tried several ports with the same result
>>
>>
>> Any idea please ?
>>
>> _______________________________________________
>> zeromq-dev mailing list
>> zeromq-dev at lists.zeromq.org
>> http://lists.zeromq.org/mailman/listinfo/zeromq-dev
>>
>>
>>
>>
>>
>> _______________________________________________
>> zeromq-dev mailing list
>> zeromq-dev at lists.zeromq.org
>> http://lists.zeromq.org/mailman/listinfo/zeromq-dev
>>
>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.zeromq.org/pipermail/zeromq-dev/attachments/20131015/5c2a5efb/attachment.htm>


More information about the zeromq-dev mailing list