Hi I think you need to loop until zmq_events is clear...
These articles may be of help: http://funcptr.net/2013/04/20/embedding-zeromq-in-the-libev-event-loop/ http://funcptr.net/2012/09/10/zeromq---edge-triggered-notification/ Jon On 8 May 2013 19:14, Pritesh Acharya <[email protected]> wrote: > I tried ZMQ_EVENTS, it worked but not completely. I am only able to > receive few message and then the callback never hits. > I'm calling zmq_getsockopt with ZMQ_EVENTS twice. before zmq_recv and > after. Here is the complete code snippet of event callback method. > > static char * zmq_msg_recv_all(evutil_socket_t fd, short event, void > *receiver) > { > char *msg = NULL; > > unsigned int zmq_events; > size_t zmq_events_size = sizeof(zmq_events); > zmq_getsockopt (receiver, ZMQ_EVENTS, &zmq_events, &zmq_events_size); > > if (zmq_events & ZMQ_POLLIN) > { > msg=calloc(1024,sizeof(char)); > int size = zmq_recv (receiver, msg, 255, ZMQ_DONTWAIT); > > if (size != -1) { > #ifdef DEBUG > printf("msg = %s\n",msg); > #endif > } > else > { > free(msg); > msg=NULL; > } > zmq_getsockopt (receiver, ZMQ_EVENTS, &zmq_events, &zmq_events_size); > } > return msg; > } > >> ------------------------------ >> >> Message: 3 >> Date: Fri, 3 May 2013 11:07:42 +0100 >> From: Jon Dyte <[email protected]> >> Subject: Re: [zeromq-dev] libevent kqueue doesn't work on fd returned >> from zmq_getsockopt() >> To: ZeroMQ development list <[email protected]> >> Message-ID: >> < >> caggrmhom1t0ydvhakdfemo5smd6l74qc1zsvcdhhpi5typz...@mail.gmail.com> >> Content-Type: text/plain; charset="iso-8859-1" >> >> >> you need to read the man page about ZMQ_FD and ZMQ_EVENTS >> >> http://api.zeromq.org/3-2:zmq-getsockopt >> >> in short, once ZMQ_FD is readable you need to look at ZMQ_EVENTS and >> consume all messages >> until ZMQ_EVENTS is clear >> >> jon >> >> >> >> On 3 May 2013 11:01, Pritesh Acharya <[email protected]> wrote: >> >> > 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); >> > event_add(read_data_on_zmq,NULL); >> > event_base_dispatch(base.evbase); >> > >> > 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 >> >> > >> > c=zmq.Context() >> > s=c.socket(zmq.PUSH) >> > s.bind('tcp://127.0.0.1:5557')while(True): >> > s.send("abc") >> > time.sleep(2) >> > >> > 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? >> > >> > _______________________________________________ >> > zeromq-dev mailing list >> > [email protected] >> > http://lists.zeromq.org/mailman/listinfo/zeromq-dev >> > >> > >> -------------- next part -------------- >> An HTML attachment was scrubbed... >> URL: >> http://lists.zeromq.org/pipermail/zeromq-dev/attachments/20130503/9444f03d/attachment-0001.htm >> >> ------------------------------ >> > > _______________________________________________ > zeromq-dev mailing list > [email protected] > http://lists.zeromq.org/mailman/listinfo/zeromq-dev > >
_______________________________________________ zeromq-dev mailing list [email protected] http://lists.zeromq.org/mailman/listinfo/zeromq-dev
