[zeromq-dev] libevent kqueue doesn't work on fd returned from zmq_getsockopt()

Pritesh Acharya priteshacharya at gmail.com
Fri May 3 12:01:25 CEST 2013

I'm writing a service in C programming using libevent and zmq. Msg is
pushed from python code to C service using PUSH-PULL pattern.

fd received from zmq socket:

void *receiver = zmq_socket (base.zmq_ctx, ZMQ_PULL);
zmq_connect (receiver, "tcp://localhost:5557");int fd=0;size_t fd_len
= sizeof(fd);
zmq_getsockopt (receiver, ZMQ_FD, &fd, &fd_len);

Using Libevent, event registered with fd for persistent read

struct event *read_data_on_zmq =event_new(base.evbase, fd, EV_READ |
EV_PERSIST , read_data_on_zmq_cb,receiver);

On the callback method I'm doing a non-blocking receive

void read_data_on_zmq_cb(evutil_socket_t fd, short what, void *arg){
    char *msg = calloc(1024,sizeof(char));
    int size = zmq_recv (receiver, msg, 255, ZMQ_DONTWAIT);
    if (size != -1)
        puts ("is size is not -1");
        printf("msg = %s\n",msg);

In the python code I'm continuously sending message to the socket.

import zmqimport time


The problem is I'm only able to receive the message once, after that the
event callback never gets hit. If I do zmq_connect inside the
read_data_on_zmq_cb after zmq_recv, then it works fine, but I guess that is
redundant and not the correct way to do it. What is the problem here?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.zeromq.org/pipermail/zeromq-dev/attachments/20130503/fb2957c6/attachment.htm>

More information about the zeromq-dev mailing list