1 /* +------------------------------------+
\r * | Inspire Internet Relay Chat Daemon |
\r * +------------------------------------+
\r *
\r * InspIRCd: (C) 2002-2007 InspIRCd Development Team
\r * See: http://www.inspircd.org/wiki/index.php/Credits
\r *
\r * This program is free but copyrighted software; see
\r * the file COPYING for details.
\r *
\r * ---------------------------------------------------
\r */
\r\r#ifndef __SOCKETENGINE_EPOLL__
\r#define __SOCKETENGINE_EPOLL__
\r\r#include <vector>
\r#include <string>
\r#include <map>
\r#include "inspircd_config.h"
\r#include "globals.h"
\r#include "inspircd.h"
\r#include "socketengine.h"
\r#include <sys/epoll.h>
\r#define EP_DELAY 5
\r\rclass InspIRCd;
\r\r/** A specialisation of the SocketEngine class, designed to use linux 2.6 epoll().
\r */
\rclass EPollEngine : public SocketEngine
\r{
\rprivate:
\r /** These are used by epoll() to hold socket events
\r */
\r struct epoll_event events[MAX_DESCRIPTORS];
\rpublic:
\r /** Create a new EPollEngine
\r * @param Instance The creator of this object
\r */
\r EPollEngine(InspIRCd* Instance);
\r /** Delete an EPollEngine
\r */
\r virtual ~EPollEngine();
\r virtual bool AddFd(EventHandler* eh);
\r virtual int GetMaxFds();
\r virtual int GetRemainingFds();
\r virtual bool DelFd(EventHandler* eh, bool force = false);
\r virtual int DispatchEvents();
\r virtual std::string GetName();
\r virtual void WantWrite(EventHandler* eh);
\r};
\r\r/** Creates a SocketEngine
\r */
\rclass SocketEngineFactory
\r{
\rpublic:
\r /** Create a new instance of SocketEngine based on EpollEngine
\r */
\r SocketEngine* Create(InspIRCd* Instance) { return new EPollEngine(Instance); }
\r};
\r\r#endif
\r