Yes, you are missing out on being able to differentiate between reads & writes since you aren't checking the revents. However, in your case you only have a single socket and you only register for POLLIN, so you can just use the return code and skip the hard stuff. Any time it returns 1 then you know that your socket is readable.
On Feb 19, 2013, at 10:18 AM, Lee Sylvester <[email protected]> wrote: > 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 _______________________________________________ zeromq-dev mailing list [email protected] http://lists.zeromq.org/mailman/listinfo/zeromq-dev
