]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/socketengines/socketengine_select.cpp
Wheeeeee
[user/henk/code/inspircd.git] / src / socketengines / socketengine_select.cpp
index 1fe138f143b58974577ed83989024e77077f30d7..8ee381877b5b656cf1282efb4d5b3be8ee8e8f90 100644 (file)
@@ -2,7 +2,7 @@
  *       | Inspire Internet Relay Chat Daemon |
  *       +------------------------------------+
  *
- *  InspIRCd: (C) 2002-2007 InspIRCd Development Team
+ *  InspIRCd: (C) 2002-2008 InspIRCd Development Team
  * See: http://www.inspircd.org/wiki/index.php/Credits
  *
  * This program is free but copyrighted software; see
@@ -12,7 +12,9 @@
  */
 
 #include "inspircd.h"
+#ifndef WINDOWS
 #include <sys/select.h>
+#endif // WINDOWS
 #include "socketengines/socketengine_select.h"
 
 
@@ -43,7 +45,7 @@ bool SelectEngine::AddFd(EventHandler* eh)
        ref[fd] = eh;
        CurrentSetSize++;
 
-       ServerInstance->Log(DEBUG,"New file descriptor: %d", fd);
+       ServerInstance->Logs->Log("SOCKET",DEBUG,"New file descriptor: %d", fd);
        return true;
 }
 
@@ -67,7 +69,7 @@ bool SelectEngine::DelFd(EventHandler* eh, bool force)
        ref[fd] = NULL;
        fds[fd] = 0;
 
-       ServerInstance->Log(DEBUG,"Remove file descriptor: %d", fd);
+       ServerInstance->Logs->Log("SOCKET",DEBUG,"Remove file descriptor: %d", fd);
        return true;
 }
 
@@ -130,27 +132,35 @@ int SelectEngine::DispatchEvents()
                {
                        if (FD_ISSET (ev[i]->GetFd(), &errfdset))
                        {
-                               if (ev[i])
-                               {
-                                       if (getsockopt(ev[i]->GetFd(), SOL_SOCKET, SO_ERROR, &errcode, &codesize) < 0)
-                                               errcode = errno;
+                               ErrorEvents++;
+
+                               if (getsockopt(ev[i]->GetFd(), SOL_SOCKET, SO_ERROR, (char*)&errcode, &codesize) < 0)
+                                       errcode = errno;
+
+                               ev[i]->HandleEvent(EVENT_ERROR, errcode);
 
-                                       ev[i]->HandleEvent(EVENT_ERROR, errcode);
-                               }
                                continue;
                        }
-                       if (ev[i])
+                       else
                        {
                                if (writeable[ev[i]->GetFd()])
                                {
+                                       WriteEvents++;
                                        writeable[ev[i]->GetFd()] = false;
-                                       if (ev[i])
-                                               ev[i]->HandleEvent(EVENT_WRITE);
+                                       ev[i]->HandleEvent(EVENT_WRITE);
                                }
                                else
                                {
-                                       if (ev[i])
-                                               ev[i]->HandleEvent(ev[i]->Readable() ? EVENT_READ : EVENT_WRITE);
+                                       if (ev[i]->Readable())
+                                       {
+                                               ReadEvents++;
+                                               ev[i]->HandleEvent(EVENT_READ);
+                                       }
+                                       else
+                                       {
+                                               WriteEvents++;
+                                               ev[i]->HandleEvent(EVENT_WRITE);
+                                       }
                                }
                        }
                }