diff options
author | Martin Sustrik <sustrik@250bpm.com> | 2011-02-03 09:59:54 +0100 |
---|---|---|
committer | Martin Sustrik <sustrik@250bpm.com> | 2011-02-03 09:59:54 +0100 |
commit | 3f758ab2f45a07e3e77af4f1b32dc876f5a151ad (patch) | |
tree | 3d22577dc8025358fe6b066299e3408d12620181 /src | |
parent | ca1acc340c256a35f0db58805bba7cb337d9a5a3 (diff) |
Don't use RLIMIT_NOFILES in devpoll_t.
The patch allows for running 0MQ on Solaris and HP-UX
even though ulimit for max number of file descriptors
is set to unlimited.
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/devpoll.cpp | 20 | ||||
-rw-r--r-- | src/devpoll.hpp | 3 |
2 files changed, 12 insertions, 11 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; diff --git a/src/devpoll.hpp b/src/devpoll.hpp index 84ec222..81aa358 100644 --- a/src/devpoll.hpp +++ b/src/devpoll.hpp @@ -73,7 +73,8 @@ namespace zmq bool accepted; }; - std::vector <fd_entry_t> fd_table; + typedef std::vector <fd_entry_t> fd_table_t; + fd_table_t fd_table; typedef std::vector <fd_t> pending_list_t; pending_list_t pending_list; |