[zeromq-dev] Can zmq_pollitem_t contain an item with a NULL socket ?

Lindley French lindleyf at gmail.com
Thu Jan 30 13:29:22 CET 2014


No particular objection to the union idea (although it should be carefully profiled for speed against the existing code!) but I am curious, what possible benefit there could be to have NULL sockets in the poller? This seems contrary to "expected" workings in C-like languages.

> On Jan 30, 2014, at 5:20 AM, Laurent Alebarde <l.alebarde at free.fr> wrote:
> 
> IMHO, it is a bad design of zmq_pollitem_t. It should not have one attribute for socket and another one for file-descriptor with this unrobust behaviour to use the second one when the first one is NULL, but one for the type (socket or fd), and a union containing one or the other.
> 
> Implemented:
> typedef struct
> {
>     void *socket;
> #if defined _WIN32
>     SOCKET fd;
> #else
>     int fd;
> #endif
>     short events;
>     short revents;
> } zmq_pollitem_t;
> 
> Should be:
> 
> typedef struct
> {
>     int type; // ZMQ_SOCKET | ZMQ_FD
>     union {
>         void *socket;
>         #if defined _WIN32
>         SOCKET fd;
>         #else
>         int fd;
>         #endif
>     } dev;
>     short events;
>     short revents;
> } zmq_pollitem_t;
> 
> But it would break the ABI to change it, isn't it ?
> 
> 
> Le 30/01/2014 10:56, Laurent Alebarde a écrit :
>> In fact, it is in src/zmq.cpp / "int zmq_poll (zmq_pollitem_t *items_, int nitems_, long timeout_)"
>> 
>> When the socket is NULL, zmq_poll takes the second attribute of the zmq_pollitem_t structure which is a file descriptor. So, I cannot do anything here, as "socket == NULL and fd == 0" is legitimate.
>> 
>> Conclusion: I have to deal myself with the complexity of not having NULL sockets in my zmq_pollitem_t array.
>> 
>> Le 30/01/2014 09:23, Laurent Alebarde a écrit :
>>> Thanks Pieter.
>>> 
>>> Personnaly, I would prefer "ignore", in order to build zmq_pollitem_t arrays with more ease, when they are built by the application itself, and not hardwritten in the code.
>>> 
>>> Any objection ?
>>> 
>>> Le 29/01/2014 20:20, Pieter Hintjens a écrit :
>>>> Undefined, by the man page. It should probably assert in such a case.
>>>> 
>>>> On Wed, Jan 29, 2014 at 12:07 PM, Laurent Alebarde <l.alebarde at free.fr> wrote:
>>>>> Hi Devs,
>>>>> 
>>>>> What is the zmq_poll behaviour when the zmq_pollitem_t array contains an
>>>>> item with a NULL socket ? ignored, undefined, error ?
>>>>> 
>>>>> If it is in src/poll.cpp / "void zmq::poll_t::loop ()" / "for
>>>>> (pollset_t::size_type i = 0; i != pollset.size (); i++)", it seems there is
>>>>> no NULL test with a continue.
>>>>> 
>>>>> Cheers,
>>>>> 
>>>>> 
>>>>> Laurent
>>>>> 
>>>>> _______________________________________________
>>>>> zeromq-dev mailing list
>>>>> zeromq-dev at lists.zeromq.org
>>>>> http://lists.zeromq.org/mailman/listinfo/zeromq-dev
>>>>> 
>>>> _______________________________________________
>>>> zeromq-dev mailing list
>>>> zeromq-dev at lists.zeromq.org
>>>> http://lists.zeromq.org/mailman/listinfo/zeromq-dev
>>> 
>>> 
>>> 
>>> _______________________________________________
>>> zeromq-dev mailing list
>>> zeromq-dev at lists.zeromq.org
>>> http://lists.zeromq.org/mailman/listinfo/zeromq-dev
>> 
>> 
>> 
>> _______________________________________________
>> zeromq-dev mailing list
>> zeromq-dev at lists.zeromq.org
>> http://lists.zeromq.org/mailman/listinfo/zeromq-dev
> 
> _______________________________________________
> zeromq-dev mailing list
> zeromq-dev at lists.zeromq.org
> http://lists.zeromq.org/mailman/listinfo/zeromq-dev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.zeromq.org/pipermail/zeromq-dev/attachments/20140130/5153e644/attachment.htm>


More information about the zeromq-dev mailing list