summaryrefslogtreecommitdiff
path: root/src/socketengines/socketengine_poll.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/socketengines/socketengine_poll.cpp')
-rw-r--r--src/socketengines/socketengine_poll.cpp19
1 files changed, 8 insertions, 11 deletions
diff --git a/src/socketengines/socketengine_poll.cpp b/src/socketengines/socketengine_poll.cpp
index 773a89839..278485fa7 100644
--- a/src/socketengines/socketengine_poll.cpp
+++ b/src/socketengines/socketengine_poll.cpp
@@ -1,9 +1,11 @@
#include "module.h"
#ifndef _WIN32
-# include <ulimit.h>
# include <sys/poll.h>
# include <poll.h>
+# include <sys/types.h>
+# include <sys/time.h>
+# include <sys/resource.h>
# ifndef POLLRDHUP
# define POLLRDHUP 0
# endif
@@ -20,17 +22,12 @@ static std::map<int, int> socket_positions;
void SocketEngine::Init()
{
SocketCount = 0;
-#ifndef _WIN32
- max = ulimit(4, 0);
-#else
- max = 1024;
-#endif
- if (max <= 0)
- {
- Log() << "Can't determine maximum number of open sockets";
- throw CoreException("Can't determine maximum number of open sockets");
- }
+ rlimit fd_limit;
+ if (getrlimit(RLIMIT_NOFILE, &fd_limit) == -1)
+ throw CoreException(Anope::LastError());
+
+ max = fd_limit.rlim_cur;
events = new pollfd[max];
}