X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fsocketengines%2Fsocketengine_select.cpp;h=f52fb08b8b4e1cd5cd801607eaa13c77c28a7d29;hb=2553e4fff7a5a168ef796dcecb73c7365651c897;hp=b35558a70809e048e4fd53ec09a2aee8543775ce;hpb=7c1352df0c8bb2624d4f2cc8320467578c39a6ad;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/socketengines/socketengine_select.cpp b/src/socketengines/socketengine_select.cpp index b35558a70..f52fb08b8 100644 --- a/src/socketengines/socketengine_select.cpp +++ b/src/socketengines/socketengine_select.cpp @@ -11,12 +11,32 @@ * --------------------------------------------------- */ +#include "inspircd_config.h" + #include "inspircd.h" +#include "socketengine.h" + #ifndef WINDOWS #include #endif // WINDOWS -#include "socketengines/socketengine_select.h" +/** A specialisation of the SocketEngine class, designed to use traditional select(). + */ +class SelectEngine : public SocketEngine +{ +public: + /** Create a new SelectEngine + */ + SelectEngine(); + /** Delete a SelectEngine + */ + virtual ~SelectEngine(); + virtual bool AddFd(EventHandler* eh, int event_mask); + virtual bool DelFd(EventHandler* eh, bool force = false); + void OnSetEvent(EventHandler* eh, int, int); + virtual int DispatchEvents(); + virtual std::string GetName(); +}; SelectEngine::SelectEngine() { @@ -80,8 +100,8 @@ int SelectEngine::DispatchEvents() FD_ZERO(&rfdset); FD_ZERO(&errfdset); - /* Populate the select FD sets (this is why select sucks compared to epoll, kqueue, IOCP) */ - for (int i = 0; i < FD_SETSIZE; i++) + /* Populate the select FD sets (this is why select sucks compared to epoll, kqueue) */ + for (unsigned int i = 0; i < FD_SETSIZE; i++) { EventHandler* eh = ref[i]; if (!eh) @@ -148,3 +168,8 @@ std::string SelectEngine::GetName() { return "select"; } + +SocketEngine* CreateSocketEngine() +{ + return new SelectEngine; +}