mirror of
https://github.com/zeromq/libzmq.git
synced 2025-03-10 16:06:09 +00:00
Merge pull request #2139 from minrk/update-poll-based-on-poll
update socket_poller when ZMQ_POLL_BASED_ON_SELECT
This commit is contained in:
commit
91e121c9d3
@ -548,6 +548,7 @@ int zmq::socket_poller_t::wait (zmq::socket_poller_t::event_t *events_, int n_ev
|
|||||||
uint64_t end = 0;
|
uint64_t end = 0;
|
||||||
|
|
||||||
bool first_pass = true;
|
bool first_pass = true;
|
||||||
|
bool found = false;
|
||||||
fd_set inset, outset, errset;
|
fd_set inset, outset, errset;
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
@ -595,7 +596,8 @@ int zmq::socket_poller_t::wait (zmq::socket_poller_t::event_t *events_, int n_ev
|
|||||||
signaler.recv ();
|
signaler.recv ();
|
||||||
|
|
||||||
// Check for the events.
|
// Check for the events.
|
||||||
for (items_t::iterator it = items.begin (); it != items.end (); ++it) {
|
int i = 0;
|
||||||
|
for (items_t::iterator it = items.begin (); it != items.end () && i < n_events_; ++i, ++it) {
|
||||||
|
|
||||||
// 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.
|
||||||
@ -606,12 +608,10 @@ int zmq::socket_poller_t::wait (zmq::socket_poller_t::event_t *events_, int n_ev
|
|||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if (it->events & events) {
|
if (it->events & events) {
|
||||||
event_->socket = it->socket;
|
events_[i].socket = it->socket;
|
||||||
event_->user_data = it->user_data;
|
events_[i].user_data = it->user_data;
|
||||||
event_->events = it->events & events;
|
events_[i].events = it->events & events;
|
||||||
|
found = true;
|
||||||
// If there is event to return, we can exit immediately.
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Else, the poll item is a raw file descriptor, simply convert
|
// Else, the poll item is a raw file descriptor, simply convert
|
||||||
@ -627,16 +627,17 @@ int zmq::socket_poller_t::wait (zmq::socket_poller_t::event_t *events_, int n_ev
|
|||||||
events |= ZMQ_POLLERR;
|
events |= ZMQ_POLLERR;
|
||||||
|
|
||||||
if (events) {
|
if (events) {
|
||||||
event_->socket = NULL;
|
events_[i].socket = NULL;
|
||||||
event_->user_data = it->user_data;
|
events_[i].user_data = it->user_data;
|
||||||
event_->fd = it->fd;
|
events_[i].fd = it->fd;
|
||||||
event_->events = events;
|
events_[i].events = events;
|
||||||
|
found = true;
|
||||||
// If there is event to return, we can exit immediately.
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (found) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// If timeout is zero, exit immediately whether there are events or not.
|
// If timeout is zero, exit immediately whether there are events or not.
|
||||||
if (timeout_ == 0)
|
if (timeout_ == 0)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user