Aha, my bad. Okay, thanks guys. I'll take another stab at this tomorrow.
Cheers, Lee On 19 Feb 2013, at 17:11, Charles Remes <[email protected]> wrote: > It looks better except for the use of "size" in the loop control. The return > code from zmq_poll is the *number of sockets* that have pending events. The > way you are using it appears as though you believe the return code indicates > the *number of messages* which is incorrect. The way the loop is written now, > it will loop once and exit at most. > > > On Feb 19, 2013, at 10:29 AM, Lee Sylvester <[email protected]> wrote: > >> Okay, thank you. So I now have the following: >> >> int read_zmq_connections() { >> zmq_pollitem_t items [] = { >> { zmq_responder, 0, ZMQ_POLLIN, 0 } >> }; >> errno = 0; >> int ret = 0, size = zmq_poll(items, 1, 0); >> zmq_msg_t message; >> while ( size > 0 && errno == 0 ) { >> char *str = s_recv(zmq_responder); >> parse_new_data(str); >> free(str); >> ++ret; >> --size; >> } >> return ret; >> } >> >> I'm going to test it a little later once I've written my client code. :-) >> >> Thanks again. >> >> Cheers, >> Lee >> >> >> >> On 19 Feb 2013, at 16:21, Charles Remes <[email protected]> wrote: >> >>> 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 >> >> _______________________________________________ >> 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
