* | 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__
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);
if (max > 0)
{
MAX_DESCRIPTORS = max;
- return max;
}
else
{
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);
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)
{
ReadEvents++;
eh->HandleEvent(EVENT_READ);
+ if (eh != ref[fd])
+ continue;
}
if (events[i].portev_events & POLLWRNORM)
{