]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/socketengines/socketengine_select.cpp
All working now, with any luck
[user/henk/code/inspircd.git] / src / socketengines / socketengine_select.cpp
index 1fe138f143b58974577ed83989024e77077f30d7..cc7232b9919550bca550b802b2f5f877c5d1d6f7 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"
 
 
@@ -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);
+                                       }
                                }
                        }
                }