mirror of
https://github.com/zeromq/libzmq.git
synced 2025-03-18 09:23:53 +00:00
zmq_poll (select version) now correctly assumes that ZMQ_FD is edge-trigerred
This commit is contained in:
parent
f49b77eedc
commit
4d51a52874
27
src/zmq.cpp
27
src/zmq.cpp
@ -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, ¬ify_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.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user