Commit 4d51a528 authored by Martin Sustrik's avatar Martin Sustrik

zmq_poll (select version) now correctly assumes that ZMQ_FD is edge-trigerred

parent f49b77ee
...@@ -569,24 +569,17 @@ int zmq_poll (zmq_pollitem_t *items_, int nitems_, long timeout_) ...@@ -569,24 +569,17 @@ int zmq_poll (zmq_pollitem_t *items_, int nitems_, long timeout_)
// The poll item is a 0MQ socket. Retrieve pending events // The poll item is a 0MQ socket. Retrieve pending events
// using the ZMQ_EVENTS socket option. // using the ZMQ_EVENTS socket option.
if (items_ [i].socket) { if (items_ [i].socket) {
size_t zmq_fd_size = sizeof (zmq::fd_t); size_t zmq_events_size = sizeof (uint32_t);
zmq::fd_t notify_fd; uint32_t zmq_events;
if (zmq_getsockopt (items_ [i].socket, ZMQ_FD, &notify_fd, if (zmq_getsockopt (items_ [i].socket, ZMQ_EVENTS, &zmq_events,
&zmq_fd_size) == -1) &zmq_events_size) == -1)
return -1; return -1;
if (FD_ISSET (notify_fd, &inset)) { if ((items_ [i].events & ZMQ_POLLOUT) &&
size_t zmq_events_size = sizeof (uint32_t); (zmq_events & ZMQ_POLLOUT))
uint32_t zmq_events; items_ [i].revents |= ZMQ_POLLOUT;
if (zmq_getsockopt (items_ [i].socket, ZMQ_EVENTS, &zmq_events, if ((items_ [i].events & ZMQ_POLLIN) &&
&zmq_events_size) == -1) (zmq_events & ZMQ_POLLIN))
return -1; items_ [i].revents |= ZMQ_POLLIN;
if ((items_ [i].events & ZMQ_POLLOUT) &&
(zmq_events & ZMQ_POLLOUT))
items_ [i].revents |= ZMQ_POLLOUT;
if ((items_ [i].events & ZMQ_POLLIN) &&
(zmq_events & ZMQ_POLLIN))
items_ [i].revents |= ZMQ_POLLIN;
}
} }
// Else, the poll item is a raw file descriptor, simply convert // Else, the poll item is a raw file descriptor, simply convert
// the events to zmq_pollitem_t-style format. // the events to zmq_pollitem_t-style format.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment