5 #if defined ZMQ_IOTHREAD_POLLER_USE_POLL
18 worker_poller_base_t (ctx_), retired (
false)
22 zmq::poll_t::~poll_t ()
27 zmq::poll_t::handle_t zmq::poll_t::add_fd (
fd_t fd_, i_poll_events *events_)
33 fd_table_t::size_type sz = fd_table.size ();
34 if (sz <= (fd_table_t::size_type) fd_) {
35 fd_table.resize (fd_ + 1);
36 while (sz != (fd_table_t::size_type) (fd_ + 1)) {
42 pollfd pfd = {fd_, 0, 0};
43 pollset.push_back (pfd);
46 fd_table[fd_].index = pollset.size () - 1;
47 fd_table[fd_].events = events_;
55 void zmq::poll_t::rm_fd (handle_t handle_)
70 void zmq::poll_t::set_pollin (handle_t handle_)
74 pollset[
index].events |= POLLIN;
77 void zmq::poll_t::reset_pollin (handle_t handle_)
81 pollset[
index].events &= ~((short) POLLIN);
84 void zmq::poll_t::set_pollout (handle_t handle_)
88 pollset[
index].events |= POLLOUT;
91 void zmq::poll_t::reset_pollout (handle_t handle_)
95 pollset[
index].events &= ~((short) POLLOUT);
98 void zmq::poll_t::stop ()
104 int zmq::poll_t::max_fds ()
109 void zmq::poll_t::loop ()
113 int timeout = (int) execute_timers ();
117 if (pollset.empty ()) {
128 int rc =
poll (&pollset[0],
static_cast<nfds_t
> (pollset.size ()),
140 for (pollset_t::size_type
i = 0;
i != pollset.size ();
i++) {
144 if (pollset[
i].revents & (POLLERR | POLLHUP))
145 fd_table[pollset[
i].fd].events->in_event ();
148 if (pollset[
i].revents & POLLOUT)
149 fd_table[pollset[
i].fd].events->out_event ();
152 if (pollset[
i].revents & POLLIN)
153 fd_table[pollset[
i].fd].events->in_event ();
158 void zmq::poll_t::cleanup_retired ()
162 pollset_t::size_type
i = 0;
163 while (
i < pollset.size ()) {
165 pollset.erase (pollset.begin () +
i);
167 fd_table[pollset[
i].fd].index =
i;