summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorw00t <w00t@e03df62e-2008-0410-955e-edbf42e46eb7>2008-09-08 16:58:37 +0000
committerw00t <w00t@e03df62e-2008-0410-955e-edbf42e46eb7>2008-09-08 16:58:37 +0000
commit484b718ccf1505360d62401dd09e3eca6b2568d8 (patch)
tree538e611bd6d7c3dea27077db9c154fdd3c23ab8a
parent0e07fc2e9e69270a110d8dc07007498b4d03b8b0 (diff)
Move this to another (yet more appropriate) place, saves some syscalls in an unlikely condition.
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@10468 e03df62e-2008-0410-955e-edbf42e46eb7
-rw-r--r--src/listensocket.cpp37
1 files changed, 18 insertions, 19 deletions
diff --git a/src/listensocket.cpp b/src/listensocket.cpp
index 07ff2886e..d6fe2bb1f 100644
--- a/src/listensocket.cpp
+++ b/src/listensocket.cpp
@@ -100,6 +100,24 @@ void ListenSocket::AcceptInternal()
ServerInstance->stats->statsRefused++;
return;
}
+ /*
+ * XXX -
+ * this is done as a safety check to keep the file descriptors within range of fd_ref_table.
+ * its a pretty big but for the moment valid assumption:
+ * file descriptors are handed out starting at 0, and are recycled as theyre freed.
+ * therefore if there is ever an fd over 65535, 65536 clients must be connected to the
+ * irc server at once (or the irc server otherwise initiating this many connections, files etc)
+ * which for the time being is a physical impossibility (even the largest networks dont have more
+ * than about 10,000 users on ONE server!)
+ */
+ if (incomingSockfd >= ServerInstance->SE->GetMaxFds())
+ {
+ ServerInstance->Logs->Log("SOCKET", DEBUG, "Server is full");
+ ServerInstance->SE->Shutdown(incomingSockfd, 2);
+ ServerInstance->SE->Close(incomingSockfd);
+ ServerInstance->stats->statsRefused++;
+ return;
+ }
static char buf[MAXBUF];
static char target[MAXBUF];
@@ -127,25 +145,6 @@ void ListenSocket::AcceptInternal()
ServerInstance->Logs->Log("SOCKET", DEBUG, "Can't get peername: %s", strerror(errno));
}
- /*
- * XXX -
- * this is done as a safety check to keep the file descriptors within range of fd_ref_table.
- * its a pretty big but for the moment valid assumption:
- * file descriptors are handed out starting at 0, and are recycled as theyre freed.
- * therefore if there is ever an fd over 65535, 65536 clients must be connected to the
- * irc server at once (or the irc server otherwise initiating this many connections, files etc)
- * which for the time being is a physical impossibility (even the largest networks dont have more
- * than about 10,000 users on ONE server!)
- */
- if (incomingSockfd >= ServerInstance->SE->GetMaxFds())
- {
- ServerInstance->Logs->Log("SOCKET", DEBUG, "Server is full");
- ServerInstance->SE->Shutdown(incomingSockfd, 2);
- ServerInstance->SE->Close(incomingSockfd);
- ServerInstance->stats->statsRefused++;
- return;
- }
-
ServerInstance->SE->NonBlocking(incomingSockfd);
ServerInstance->stats->statsAccept++;
this->OnAcceptReady(target, incomingSockfd, buf);