Okay, thanks. I'm looking at the reference and I can see that zmq_poll returns the number of items, but it feels like I'm missing something when I rely on that :-S
Lee On 19 Feb 2013, at 15:52, Charles Remes <[email protected]> wrote: > Hmmm, I'm not sure that's exactly right. > > The basic idea is that you want to check the return code from zmq_poll. If it > is greater than 0, then the socket can be read from. You should then read > from the socket until no more messages are available. I don't know how it > works with the #s_recv() function (presumably that is part of the czmq > binding) but you want to read until the socket is empty or you get EAGAIN. > Perhaps that function does that for you under the covers. > > So, the loop should be around reading from the socket and *not* around > zmq_poll. Does that make sense? > > > > On Feb 19, 2013, at 9:16 AM, Lee Sylvester <[email protected]> wrote: > >> Thank you, that's great. So, based on what I've read, does this look >> correct for what I'm trying to accomplish? >> >> int read_zmq_connections() { >> zmq_pollitem_t items [] = { >> { zmq_responder, 0, ZMQ_POLLIN, 0 } >> }; >> while (1) { >> zmq_msg_t message; >> zmq_poll(items, 1, 0); >> if (items[0].revents & ZMQ_POLLIN) { >> char *str = s_recv(zmq_responder); >> parse_new_data(str); >> free(str); >> } else { >> break; >> } >> } >> return 0; >> } >> >> Thanks, >> Lee >> >> >> >> >> On 19 Feb 2013, at 14:52, Charles Remes <[email protected]> wrote: >> >>> Take a look at the man page for zmq_poll. You can do a non-blocking poll >>> for incoming messages on your socket. If it returns immediately with 0, >>> then no sockets in your pollset have pending messages to read. >>> >>> Be aware that when zmq_poll does indicate that you have messages, you must >>> read *all* of them from the socket before zmq_poll will work again. I'm >>> pretty sure the man page explains this. >>> >>> Good luck. >>> >>> On Feb 19, 2013, at 8:44 AM, Lee Sylvester <[email protected]> wrote: >>> >>>> Hey guys, >>>> >>>> So, I've integrated ØMQ into my server. Now, I want to use ØMQ as a means >>>> to supply information to a HTTP server from a separate management app. >>>> So, in theory, it will look something like this >>>> >>>> int read_zmq_connections() { >>>> int ret = 0; >>>> while (zmq_has_messages(zmq_responder)) { >>>> char *str = s_recv(zmq_responder); >>>> parse_new_data(str); >>>> free(str); >>>> ++ret; >>>> } >>>> return ret; >>>> } >>>> >>>> This way, if there are no messages on zmq_responder, then the function >>>> will simply return. What I don't know how to do (and can't quite find) is >>>> how to check if messages exist on the connection. Can anyone please point >>>> me in the right direction? >>>> >>>> The reason why I need this non-blocking is that I will only be calling >>>> 'read_zmq_connections' approximately once every five minutes and I don't >>>> want my app to hang while waiting for messages. >>>> >>>> Thanks loads in advance, >>>> Lee >>>> _______________________________________________ >>>> 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 >> >> _______________________________________________ >> 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 _______________________________________________ zeromq-dev mailing list [email protected] http://lists.zeromq.org/mailman/listinfo/zeromq-dev
