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