]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/socketengines/socketengine_epoll.cpp
Change more modules to VF_OPTCOMMON and assert identical charsets in m_nationalchars
[user/henk/code/inspircd.git] / src / socketengines / socketengine_epoll.cpp
index 059798d25ef77ae7743025097a9645c57ae68763..11fa72072fc216aca986f7f68b4d07e838fff519 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 <vector>
+#include <string>
+#include <map>
 #include "inspircd.h"
 #include "exitcodes.h"
-#include "socketengines/socketengine_epoll.h"
+#include "socketengine.h"
+#include <sys/epoll.h>
 #include <ulimit.h>
+#define EP_DELAY 5
+
+/** A specialisation of the SocketEngine class, designed to use linux 2.6 epoll().
+ */
+class EPollEngine : public SocketEngine
+{
+private:
+       /** These are used by epoll() to hold socket events
+        */
+       struct epoll_event* events;
+       int EngineHandle;
+public:
+       /** Create a new EPollEngine
+        */
+       EPollEngine();
+       /** Delete an EPollEngine
+        */
+       virtual ~EPollEngine();
+       virtual bool AddFd(EventHandler* eh, int event_mask);
+       virtual void OnSetEvent(EventHandler* eh, int old_mask, int new_mask);
+       virtual bool DelFd(EventHandler* eh, bool force = false);
+       virtual int DispatchEvents();
+       virtual std::string GetName();
+};
 
 EPollEngine::EPollEngine()
 {
@@ -216,3 +244,7 @@ std::string EPollEngine::GetName()
        return "epoll";
 }
 
+SocketEngine* CreateSocketEngine()
+{
+       return new EPollEngine;
+}