diff options
Diffstat (limited to 'src/select.cpp')
-rw-r--r-- | src/select.cpp | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/src/select.cpp b/src/select.cpp index be5cd47..59eb83e 100644 --- a/src/select.cpp +++ b/src/select.cpp @@ -65,6 +65,10 @@ zmq::select_t::handle_t zmq::select_t::add_fd (fd_t fd_, i_poll_events *events_) fd_entry_t entry = {fd_, events_}; fds.push_back (entry); + // Ensure we do not attempt to select () on more than FD_SETSIZE + // file descriptors. + zmq_assert (fds.size () <= FD_SETSIZE); + // Start polling on errors. FD_SET (fd_, &source_set_err); @@ -217,10 +221,13 @@ void zmq::select_t::loop () // Destroy retired event sources. if (retired) { - for (fd_set_t::size_type i = 0; i < fds.size (); i ++) { - if (fds [i].fd == retired_fd) { - fds.erase (fds.begin () + i); - i --; + fd_set_t::iterator it = fds.begin(); + while (it != fds.end()) { + if (it->fd == retired_fd) { + it = fds.erase(it); + } + else { + it++; } } retired = false; |