[zeromq-dev] Assertion during zmq_recv in 3.x

Stuart Brandt stu at compuserve.com
Fri Jul 27 21:23:35 CEST 2012


I get an assertion during a call to zmq_recv on 2 different OSes (OSX 
10.7.4 and CentOS 5.8) under two different builds of 3.x (v3.2.0-rc1 and 
a recent build off latest at github.com/zeromq/libzmq).

The assertion is:
Assertion failed: (msg_->flags () & msg_t::identity) == 0 (router.cpp:220)
Aborted

The setup involves:
1) the simple message queue broker found at 
https://github.com/imatix/zguide/blob/master/examples/C/msgqueue.c
I modified the #include to look for zmq.h rather than zhelpers.h to get 
it to compile with ZMQ 3.x

2) a minimal server implementation that connects to the broker and does 
a zmq_recv. Code is:
//
//  Demo of assertion in ZMQ 3.x by REP socket connecting to ROUTER socket
//  Connects to tcp://localhost:5560
//
#include <stdio.h>
#include <zmq.h>

int main (void)
{
     char buf[80];   // buffer for zmq_recv call
     int len;        // len returned by zmq_recv
     void *ctx;      // ZMQ context
     void *sock;     // ZMQ socket

     // init ZMQ context, create a REP socket, and connect to ROUTER
     ctx = zmq_ctx_new();
     sock = zmq_socket(ctx,ZMQ_REP);
     zmq_connect (sock, "tcp://localhost:5560");

     // do a basic zmq_recv call...warn if it fails
     len = zmq_recv(sock,buf,sizeof(buf),0);
     if (len < 0) {
         printf("zmq_recv failed - %s\n",zmq_strerror(errno));
     }

     // Done. Clean up and end
     zmq_close (sock);
     zmq_term (ctx);
     return 0;
}


Steps to repro are start server, start broker, kill broker (spec. 
ctrl-C), restart broker. Server aborts with the above assertion.

Is there something my code should be doing differently?

Thanks....Stuart






More information about the zeromq-dev mailing list