diff options
Diffstat (limited to 'src/devpoll.cpp')
-rw-r--r-- | src/devpoll.cpp | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/src/devpoll.cpp b/src/devpoll.cpp index 95923c9..61409ad 100644 --- a/src/devpoll.cpp +++ b/src/devpoll.cpp @@ -23,7 +23,6 @@ #include <sys/devpoll.h> #include <sys/time.h> -#include <sys/resource.h> #include <sys/types.h> #include <sys/stat.h> #include <sys/ioctl.h> @@ -40,15 +39,6 @@ zmq::devpoll_t::devpoll_t () : stopping (false) { - // Get limit on open files - struct rlimit rl; - int rc = getrlimit (RLIMIT_NOFILE, &rl); - errno_assert (rc != -1); - fd_table.resize (rl.rlim_cur); - - for (rlim_t i = 0; i < rl.rlim_cur; i ++) - fd_table [i].valid = false; - devpoll_fd = open ("/dev/poll", O_RDWR); errno_assert (devpoll_fd != -1); } @@ -69,6 +59,16 @@ void zmq::devpoll_t::devpoll_ctl (fd_t fd_, short events_) zmq::devpoll_t::handle_t zmq::devpoll_t::add_fd (fd_t fd_, i_poll_events *reactor_) { + // If the file descriptor table is too small expand it. + fd_table_t::size_type sz = fd_table.size (); + if (sz <= (fd_table_t::size_type) fd_) { + fd_table.resize (fd_ + 1); + while (sz != (fd_table_t::size_type) (fd_ + 1)) { + fd_table [sz].valid = false; + ++sz; + } + } + assert (!fd_table [fd_].valid); fd_table [fd_].events = 0; |