]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/socketengines/socketengine_ports.cpp
Merge pull request #16 from Adam-/insp20
[user/henk/code/inspircd.git] / src / socketengines / socketengine_ports.cpp
index 28dfdf4e4813b74fedf5413cb46443009a7db8ac..258c89709ace33ee1129d47b43a87960c8279d76 100644 (file)
@@ -2,7 +2,7 @@
  *       | Inspire Internet Relay Chat Daemon |
  *       +------------------------------------+
  *
- *  InspIRCd: (C) 2002-2009 InspIRCd Development Team
+ *  InspIRCd: (C) 2002-2010 InspIRCd Development Team
  * See: http://wiki.inspircd.org/Credits
  *
  * This program is free but copyrighted software; see
 #include "inspircd.h"
 #include "exitcodes.h"
 #include <port.h>
-/*       +------------------------------------+
- *       | Inspire Internet Relay Chat Daemon |
- *       +------------------------------------+
- *
- *  InspIRCd: (C) 2002-2009 InspIRCd Development Team
- * See: http://wiki.inspircd.org/Credits
- *
- * This program is free but copyrighted software; see
- *            the file COPYING for details.
- *
- * ---------------------------------------------------
- */
 
 #ifndef __SOCKETENGINE_PORTS__
 #define __SOCKETENGINE_PORTS__
@@ -60,7 +48,7 @@ public:
        virtual ~PortsEngine();
        virtual bool AddFd(EventHandler* eh, int event_mask);
        void OnSetEvent(EventHandler* eh, int old_event, int new_event);
-       virtual bool DelFd(EventHandler* eh, bool force = false);
+       virtual void DelFd(EventHandler* eh);
        virtual int DispatchEvents();
        virtual std::string GetName();
        virtual void WantWrite(EventHandler* eh);
@@ -77,7 +65,6 @@ PortsEngine::PortsEngine()
        if (max > 0)
        {
                MAX_DESCRIPTORS = max;
-               return max;
        }
        else
        {
@@ -143,11 +130,11 @@ void PortsEngine::WantWrite(EventHandler* eh, int old_mask, int new_mask)
                port_associate(EngineHandle, PORT_SOURCE_FD, eh->GetFd(), mask_to_events(new_mask), eh);
 }
 
-bool PortsEngine::DelFd(EventHandler* eh, bool force)
+void PortsEngine::DelFd(EventHandler* eh)
 {
        int fd = eh->GetFd();
        if ((fd < 0) || (fd > GetMaxFds() - 1))
-               return false;
+               return;
 
        port_dissociate(EngineHandle, PORT_SOURCE_FD, fd);
 
@@ -167,6 +154,7 @@ int PortsEngine::DispatchEvents()
 
        unsigned int nget = 1; // used to denote a retrieve request.
        int i = port_getn(EngineHandle, this->events, GetMaxFds() - 1, &nget, &poll_time);
+       ServerInstance->UpdateTime();
 
        // first handle an error condition
        if (i == -1)
@@ -196,6 +184,8 @@ int PortsEngine::DispatchEvents()
                                        {
                                                ReadEvents++;
                                                eh->HandleEvent(EVENT_READ);
+                                               if (eh != ref[fd])
+                                                       continue;
                                        }
                                        if (events[i].portev_events & POLLWRNORM)
                                        {