]> git.netwichtig.de Git - user/henk/code/inspircd.git/commitdiff
Relax fd bounds checking
authorAttila Molnar <attilamolnar@hush.com>
Sat, 7 Jun 2014 11:30:14 +0000 (13:30 +0200)
committerAttila Molnar <attilamolnar@hush.com>
Sat, 7 Jun 2014 11:30:14 +0000 (13:30 +0200)
We can cope with fds greater than SocketEngine::GetMaxFds() since 3752b3f59d5216d7dc6221a361efc76b9ad2273d

src/listensocket.cpp
src/socketengine.cpp
src/socketengines/socketengine_epoll.cpp
src/socketengines/socketengine_kqueue.cpp
src/socketengines/socketengine_poll.cpp
src/socketengines/socketengine_ports.cpp
src/usermanager.cpp

index e73a8f4cee9b9fa89df7c2e082c9a5f4182ea253..cb4bfd2db4a01bd06fa6f177bce17e4b8e4e2ef3 100644 (file)
@@ -125,25 +125,6 @@ void ListenSocket::AcceptInternal()
                irc::sockets::aptosa(bind_addr, bind_port, server);
        }
 
-       /*
-        * 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 >= SocketEngine::GetMaxFds())
-       {
-               ServerInstance->Logs->Log("SOCKET", LOG_DEBUG, "Server is full");
-               SocketEngine::Shutdown(incomingSockfd, 2);
-               SocketEngine::Close(incomingSockfd);
-               ServerInstance->stats->statsRefused++;
-               return;
-       }
-
        if (client.sa.sa_family == AF_INET6)
        {
                /*
index 86608f0a31d90c4461020916ae0541deb844c99d..c6c520efcd12501212dabdddca8cd930e528076b 100644 (file)
@@ -136,7 +136,7 @@ bool SocketEngine::BoundsCheckFd(EventHandler* eh)
 {
        if (!eh)
                return false;
-       if ((eh->GetFd() < 0) || (eh->GetFd() > GetMaxFds()))
+       if (eh->GetFd() < 0)
                return false;
        return true;
 }
index 26dfc8f2f14fcbef7efb2dae7063c41d9e50b1ba..a54907fca0d095a06b7f50d4a39385cc24059fb5 100644 (file)
@@ -102,9 +102,9 @@ static unsigned mask_to_epoll(int event_mask)
 bool SocketEngine::AddFd(EventHandler* eh, int event_mask)
 {
        int fd = eh->GetFd();
-       if ((fd < 0) || (fd > GetMaxFds() - 1))
+       if (fd < 0)
        {
-               ServerInstance->Logs->Log("SOCKET", LOG_DEBUG, "AddFd out of range: (fd: %d, max: %d)", fd, GetMaxFds());
+               ServerInstance->Logs->Log("SOCKET", LOG_DEBUG, "AddFd out of range: (fd: %d)", fd);
                return false;
        }
 
@@ -151,9 +151,9 @@ void SocketEngine::OnSetEvent(EventHandler* eh, int old_mask, int new_mask)
 void SocketEngine::DelFd(EventHandler* eh)
 {
        int fd = eh->GetFd();
-       if ((fd < 0) || (fd > GetMaxFds() - 1))
+       if (fd < 0)
        {
-               ServerInstance->Logs->Log("SOCKET", LOG_DEBUG, "DelFd out of range: (fd: %d, max: %d)", fd, GetMaxFds());
+               ServerInstance->Logs->Log("SOCKET", LOG_DEBUG, "DelFd out of range: (fd: %d)", fd);
                return;
        }
 
index b7797a82f5588590ae2d29c6ee634a8d03a38430..68c1bda8c2dbad62ddab3001649663895e43f902 100644 (file)
@@ -105,7 +105,7 @@ bool SocketEngine::AddFd(EventHandler* eh, int event_mask)
 {
        int fd = eh->GetFd();
 
-       if ((fd < 0) || (fd > GetMaxFds() - 1))
+       if (fd < 0)
                return false;
 
        if (!SocketEngine::AddFdRef(eh))
@@ -128,7 +128,7 @@ void SocketEngine::DelFd(EventHandler* eh)
 {
        int fd = eh->GetFd();
 
-       if ((fd < 0) || (fd > GetMaxFds() - 1))
+       if (fd < 0)
        {
                ServerInstance->Logs->Log("SOCKET", LOG_DEFAULT, "DelFd() on invalid fd: %d", fd);
                return;
index 8fa0a13c5ad256958f9bde0f843d2b5aac5b6084..4eca494cfc01917f69bdf2c7479e24a37240811b 100644 (file)
@@ -80,9 +80,9 @@ static int mask_to_poll(int event_mask)
 bool SocketEngine::AddFd(EventHandler* eh, int event_mask)
 {
        int fd = eh->GetFd();
-       if ((fd < 0) || (fd > GetMaxFds() - 1))
+       if (fd < 0)
        {
-               ServerInstance->Logs->Log("SOCKET", LOG_DEBUG, "AddFd out of range: (fd: %d, max: %d)", fd, GetMaxFds());
+               ServerInstance->Logs->Log("SOCKET", LOG_DEBUG, "AddFd out of range: (fd: %d)", fd);
                return false;
        }
 
@@ -128,9 +128,9 @@ void SocketEngine::OnSetEvent(EventHandler* eh, int old_mask, int new_mask)
 void SocketEngine::DelFd(EventHandler* eh)
 {
        int fd = eh->GetFd();
-       if ((fd < 0) || (fd > MAX_DESCRIPTORS))
+       if (fd < 0)
        {
-               ServerInstance->Logs->Log("SOCKET", LOG_DEBUG, "DelFd out of range: (fd: %d, max: %d)", fd, GetMaxFds());
+               ServerInstance->Logs->Log("SOCKET", LOG_DEBUG, "DelFd out of range: (fd: %d)", fd);
                return;
        }
 
index c304001075d3ad02443aa587cb6bf3f17e5d4680..deafd8fcbb60b9548fd25c4a715f96af14583944 100644 (file)
@@ -95,7 +95,7 @@ static int mask_to_events(int event_mask)
 bool SocketEngine::AddFd(EventHandler* eh, int event_mask)
 {
        int fd = eh->GetFd();
-       if ((fd < 0) || (fd > GetMaxFds() - 1))
+       if (fd < 0)
                return false;
 
        if (!SocketEngine::AddFdRef(eh))
@@ -119,7 +119,7 @@ void SocketEngine::OnSetEvent(EventHandler* eh, int old_mask, int new_mask)
 void SocketEngine::DelFd(EventHandler* eh)
 {
        int fd = eh->GetFd();
-       if ((fd < 0) || (fd > GetMaxFds() - 1))
+       if (fd < 0)
                return;
 
        port_dissociate(EngineHandle, PORT_SOURCE_FD, fd);
index 5dc410fffae7260e1fe13ff36f4443cff3c38471..3c234f13f5c3ebee11f4e799fd7d6afdf742a06b 100644 (file)
@@ -77,7 +77,7 @@ void UserManager::AddUser(int socket, ListenSocket* via, irc::sockets::sockaddrs
 
        this->local_users.push_front(New);
 
-       if ((this->local_users.size() > ServerInstance->Config->SoftLimit) || (this->local_users.size() >= (unsigned int)SocketEngine::GetMaxFds()))
+       if (this->local_users.size() > ServerInstance->Config->SoftLimit)
        {
                ServerInstance->SNO->WriteToSnoMask('a', "Warning: softlimit value has been reached: %d clients", ServerInstance->Config->SoftLimit);
                this->QuitUser(New,"No more connections allowed");