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
