From e7887c1f013248274574ab8e3167f742ccb3d69b Mon Sep 17 00:00:00 2001 From: Adam Date: Tue, 26 Apr 2011 19:13:51 -0400 Subject: Unmodularized the socket engine because its causing problems and really is unnecessary --- modules/socketengines/m_socketengine_epoll.cpp | 178 --------------------- modules/socketengines/m_socketengine_poll.cpp | 198 ------------------------ modules/socketengines/m_socketengine_select.cpp | 129 --------------- 3 files changed, 505 deletions(-) delete mode 100644 modules/socketengines/m_socketengine_epoll.cpp delete mode 100644 modules/socketengines/m_socketengine_poll.cpp delete mode 100644 modules/socketengines/m_socketengine_select.cpp (limited to 'modules/socketengines') diff --git a/modules/socketengines/m_socketengine_epoll.cpp b/modules/socketengines/m_socketengine_epoll.cpp deleted file mode 100644 index 0950f62de..000000000 --- a/modules/socketengines/m_socketengine_epoll.cpp +++ /dev/null @@ -1,178 +0,0 @@ -/* RequiredFunctions: epoll_wait */ - -#include "module.h" -#include -#include - -class SocketEngineEPoll : public SocketEngineBase -{ - private: - long max; - int EngineHandle; - epoll_event *events; - - public: - SocketEngineEPoll() - { - max = ulimit(4, 0); - - if (max <= 0) - { - Log() << "Can't determine maximum number of open sockets"; - throw ModuleException("Can't determine maximum number of open sockets"); - } - - EngineHandle = epoll_create(max / 4); - - if (EngineHandle == -1) - { - Log() << "Could not initialize epoll socket engine: " << Anope::LastError(); - throw ModuleException(Anope::string("Could not initialize epoll socket engine: ") + Anope::LastError()); - } - - events = new epoll_event[max]; - memset(events, 0, sizeof(epoll_event) * max); - } - - ~SocketEngineEPoll() - { - delete [] events; - } - - void AddSocket(Socket *s) - { - epoll_event ev; - - memset(&ev, 0, sizeof(ev)); - - ev.events = EPOLLIN; - ev.data.fd = s->GetFD(); - - if (epoll_ctl(EngineHandle, EPOLL_CTL_ADD, ev.data.fd, &ev) == -1) - { - Log() << "Unable to add fd " << ev.data.fd << " to socketengine epoll: " << Anope::LastError(); - return; - } - - Sockets.insert(std::make_pair(ev.data.fd, s)); - } - - void DelSocket(Socket *s) - { - epoll_event ev; - - memset(&ev, 0, sizeof(ev)); - - ev.data.fd = s->GetFD(); - - if (epoll_ctl(EngineHandle, EPOLL_CTL_DEL, ev.data.fd, &ev) == -1) - { - Log() << "Unable to delete fd " << ev.data.fd << " from socketengine epoll: " << Anope::LastError(); - return; - } - - Sockets.erase(ev.data.fd); - } - - void MarkWritable(Socket *s) - { - if (s->HasFlag(SF_WRITABLE)) - return; - - epoll_event ev; - - memset(&ev, 0, sizeof(ev)); - - ev.events = EPOLLIN | EPOLLOUT; - ev.data.fd = s->GetFD(); - - if (epoll_ctl(EngineHandle, EPOLL_CTL_MOD, ev.data.fd, &ev) == -1) - Log() << "Unable to mark fd " << ev.data.fd << " as writable in socketengine epoll: " << Anope::LastError(); - else - s->SetFlag(SF_WRITABLE); - } - - void ClearWritable(Socket *s) - { - if (!s->HasFlag(SF_WRITABLE)) - return; - - epoll_event ev; - - memset(&ev, 0, sizeof(ev)); - - ev.events = EPOLLIN; - ev.data.fd = s->GetFD(); - - if (epoll_ctl(EngineHandle, EPOLL_CTL_MOD, ev.data.fd, &ev) == -1) - Log() << "Unable to mark fd " << ev.data.fd << " as unwritable in socketengine epoll: " << Anope::LastError(); - else - s->UnsetFlag(SF_WRITABLE); - } - - void Process() - { - int total = epoll_wait(EngineHandle, events, max - 1, Config->ReadTimeout * 1000); - Anope::CurTime = time(NULL); - - /* EINTR can be given if the read timeout expires */ - if (total == -1) - { - if (errno != EINTR) - Log() << "SockEngine::Process(): error: " << Anope::LastError(); - return; - } - - for (int i = 0; i < total; ++i) - { - epoll_event *ev = &events[i]; - Socket *s = Sockets[ev->data.fd]; - - if (s->HasFlag(SF_DEAD)) - continue; - if (ev->events & (EPOLLHUP | EPOLLERR)) - { - s->ProcessError(); - s->SetFlag(SF_DEAD); - continue; - } - - if ((ev->events & EPOLLIN) && !s->ProcessRead()) - s->SetFlag(SF_DEAD); - - if ((ev->events & EPOLLOUT) && !s->ProcessWrite()) - s->SetFlag(SF_DEAD); - } - - for (int i = 0; i < total; ++i) - { - epoll_event *ev = &events[i]; - Socket *s = Sockets[ev->data.fd]; - - if (s->HasFlag(SF_DEAD)) - delete s; - } - } -}; - -class ModuleSocketEngineEPoll : public Module -{ - SocketEngineEPoll engine; - - public: - ModuleSocketEngineEPoll(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator) - { - this->SetAuthor("Anope"); - this->SetPermanent(true); - this->SetType(SOCKETENGINE); - - SocketEngine = &engine; - } - - ~ModuleSocketEngineEPoll() - { - SocketEngine = NULL; - } -}; - -MODULE_INIT(ModuleSocketEngineEPoll) diff --git a/modules/socketengines/m_socketengine_poll.cpp b/modules/socketengines/m_socketengine_poll.cpp deleted file mode 100644 index e85c79bb0..000000000 --- a/modules/socketengines/m_socketengine_poll.cpp +++ /dev/null @@ -1,198 +0,0 @@ -#include "module.h" - -#ifndef _WIN32 -# include -# include -# include -# ifndef POLLRDHUP -# define POLLRDHUP 0 -# endif -#else -# define poll WSAPoll -# define POLLRDHUP POLLHUP -#endif - -class SocketEnginePoll : public SocketEngineBase -{ - private: - long max; - pollfd *events; - int SocketCount; - std::map socket_positions; - - public: - SocketEnginePoll() - { - SocketCount = 0; -#ifndef _WIN32 - max = ulimit(4, 0); -#else - max = 1024; -#endif - - if (max <= 0) - { - Log() << "Can't determine maximum number of open sockets"; - throw ModuleException("Can't determine maximum number of open sockets"); - } - - events = new pollfd[max]; - } - - ~SocketEnginePoll() - { - delete [] events; - } - - void AddSocket(Socket *s) - { - if (SocketCount == max) - { - Log() << "Unable to add fd " << s->GetFD() << " to socketengine poll, engine is full"; - return; - } - - pollfd *ev = &this->events[SocketCount]; - ev->fd = s->GetFD(); - ev->events = POLLIN; - ev->revents = 0; - - Sockets.insert(std::make_pair(ev->fd, s)); - socket_positions.insert(std::make_pair(ev->fd, SocketCount)); - - ++SocketCount; - } - - void DelSocket(Socket *s) - { - std::map::iterator pos = socket_positions.find(s->GetFD()); - if (pos == socket_positions.end()) - { - Log() << "Unable to delete unknown fd " << s->GetFD() << " from socketengine poll"; - return; - } - - if (pos->second != SocketCount - 1) - { - pollfd *ev = &this->events[pos->second], - *last_ev = &this->events[SocketCount - 1]; - - ev->fd = last_ev->fd; - ev->events = last_ev->events; - ev->revents = last_ev->revents; - - socket_positions[ev->fd] = pos->second; - } - - Sockets.erase(s->GetFD()); - this->socket_positions.erase(pos); - - --SocketCount; - } - - void MarkWritable(Socket *s) - { - if (s->HasFlag(SF_WRITABLE)) - return; - - std::map::iterator pos = socket_positions.find(s->GetFD()); - if (pos == socket_positions.end()) - { - Log() << "Unable to mark unknown fd " << s->GetFD() << " as writable"; - return; - } - - pollfd *ev = &this->events[pos->second]; - ev->events |= POLLOUT; - - s->SetFlag(SF_WRITABLE); - } - - void ClearWritable(Socket *s) - { - if (!s->HasFlag(SF_WRITABLE)) - return; - - std::map::iterator pos = socket_positions.find(s->GetFD()); - if (pos == socket_positions.end()) - { - Log() << "Unable to mark unknown fd " << s->GetFD() << " as writable"; - return; - } - - pollfd *ev = &this->events[pos->second]; - ev->events &= ~POLLOUT; - - s->UnsetFlag(SF_WRITABLE); - } - - void Process() - { - int total = poll(this->events, this->SocketCount, Config->ReadTimeout * 1000); - Anope::CurTime = time(NULL); - - /* EINTR can be given if the read timeout expires */ - if (total == -1) - { - if (errno != EINTR) - Log() << "SockEngine::Process(): error: " << Anope::LastError(); - return; - } - - for (int i = 0, processed = 0; i < SocketCount && processed != total; ++i) - { - pollfd *ev = &this->events[i]; - - if (ev->revents != 0) - ++processed; - - Socket *s = Sockets[ev->fd]; - - if (s->HasFlag(SF_DEAD)) - continue; - if (ev->revents & (POLLERR | POLLRDHUP)) - { - s->ProcessError(); - s->SetFlag(SF_DEAD); - continue; - } - - if ((ev->revents & POLLIN) && !s->ProcessRead()) - s->SetFlag(SF_DEAD); - - if ((ev->revents & POLLOUT) && !s->ProcessWrite()) - s->SetFlag(SF_DEAD); - } - - for (int i = 0; i < SocketCount; ++i) - { - pollfd *ev = &this->events[i]; - Socket *s = Sockets[ev->fd]; - - if (s->HasFlag(SF_DEAD)) - delete s; - } - } -}; - -class ModuleSocketEnginePoll : public Module -{ - SocketEnginePoll engine; - - public: - ModuleSocketEnginePoll(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator) - { - this->SetAuthor("Anope"); - this->SetPermanent(true); - this->SetType(SOCKETENGINE); - - SocketEngine = &engine; - } - - ~ModuleSocketEnginePoll() - { - SocketEngine = NULL; - } -}; - -MODULE_INIT(ModuleSocketEnginePoll) diff --git a/modules/socketengines/m_socketengine_select.cpp b/modules/socketengines/m_socketengine_select.cpp deleted file mode 100644 index 3ea9eab27..000000000 --- a/modules/socketengines/m_socketengine_select.cpp +++ /dev/null @@ -1,129 +0,0 @@ -#include "module.h" - -class SocketEngineSelect : public SocketEngineBase -{ - private: - /* Max Read FD */ - int MaxFD; - /* Read FDs */ - fd_set ReadFDs; - /* Write FDs */ - fd_set WriteFDs; - - public: - SocketEngineSelect() - { - MaxFD = 0; - FD_ZERO(&ReadFDs); - FD_ZERO(&WriteFDs); - } - - ~SocketEngineSelect() - { - FD_ZERO(&ReadFDs); - FD_ZERO(&WriteFDs); - } - - void AddSocket(Socket *s) - { - if (s->GetFD() > MaxFD) - MaxFD = s->GetFD(); - FD_SET(s->GetFD(), &ReadFDs); - Sockets.insert(std::make_pair(s->GetFD(), s)); - } - - void DelSocket(Socket *s) - { - if (s->GetFD() == MaxFD) - --MaxFD; - FD_CLR(s->GetFD(), &ReadFDs); - FD_CLR(s->GetFD(), &WriteFDs); - Sockets.erase(s->GetFD()); - } - - void MarkWritable(Socket *s) - { - if (s->HasFlag(SF_WRITABLE)) - return; - FD_SET(s->GetFD(), &WriteFDs); - s->SetFlag(SF_WRITABLE); - } - - void ClearWritable(Socket *s) - { - if (!s->HasFlag(SF_WRITABLE)) - return; - FD_CLR(s->GetFD(), &WriteFDs); - s->UnsetFlag(SF_WRITABLE); - } - - void Process() - { - fd_set rfdset = ReadFDs, wfdset = WriteFDs, efdset = ReadFDs; - timeval tval; - tval.tv_sec = Config->ReadTimeout; - tval.tv_usec = 0; - - int sresult = select(MaxFD + 1, &rfdset, &wfdset, &efdset, &tval); - Anope::CurTime = time(NULL); - - if (sresult == -1) - { - Log() << "SockEngine::Process(): error: " << Anope::LastError(); - } - else if (sresult) - { - int processed = 0; - for (std::map::const_iterator it = Sockets.begin(), it_end = Sockets.end(); it != it_end && processed != sresult; ++it) - { - Socket *s = it->second; - - if (FD_ISSET(s->GetFD(), &efdset) || FD_ISSET(s->GetFD(), &rfdset) || FD_ISSET(s->GetFD(), &wfdset)) - ++processed; - if (s->HasFlag(SF_DEAD)) - continue; - if (FD_ISSET(s->GetFD(), &efdset)) - { - s->ProcessError(); - s->SetFlag(SF_DEAD); - continue; - } - if (FD_ISSET(s->GetFD(), &rfdset) && !s->ProcessRead()) - s->SetFlag(SF_DEAD); - if (FD_ISSET(s->GetFD(), &wfdset) && !s->ProcessWrite()) - s->SetFlag(SF_DEAD); - } - - for (std::map::iterator it = Sockets.begin(), it_end = Sockets.end(); it != it_end; ) - { - Socket *s = it->second; - ++it; - - if (s->HasFlag(SF_DEAD)) - delete s; - } - } - } -}; - -class ModuleSocketEngineSelect : public Module -{ - SocketEngineSelect engine; - - public: - ModuleSocketEngineSelect(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator) - { - this->SetAuthor("Anope"); - this->SetPermanent(true); - this->SetType(SOCKETENGINE); - - SocketEngine = &engine; - } - - ~ModuleSocketEngineSelect() - { - SocketEngine = NULL; - } -}; - -MODULE_INIT(ModuleSocketEngineSelect) -- cgit