diff options
author | Adam <Adam@anope.org> | 2010-08-01 20:43:48 -0400 |
---|---|---|
committer | Adam <Adam@anope.org> | 2010-08-01 20:43:48 -0400 |
commit | 4fe1c9233c61b75018f7b49d069aca6de76cc9f5 (patch) | |
tree | 26369ccd40f00dd4fbcb648357eb41b5ac8699c1 /modules/socketengines/m_socketengine_epoll.cpp | |
parent | 90976b66728fcc671f3ecc4a2d39e438d6d8bcb6 (diff) |
Made the epoll socket engine handle MarkWriteable and ClearWriteable events
Diffstat (limited to 'modules/socketengines/m_socketengine_epoll.cpp')
-rw-r--r-- | modules/socketengines/m_socketengine_epoll.cpp | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/modules/socketengines/m_socketengine_epoll.cpp b/modules/socketengines/m_socketengine_epoll.cpp index b65656554..ffc176e6f 100644 --- a/modules/socketengines/m_socketengine_epoll.cpp +++ b/modules/socketengines/m_socketengine_epoll.cpp @@ -47,7 +47,7 @@ class SocketEngineEPoll : public SocketEngineBase memset(&ev, 0, sizeof(ev)); - ev.events = EPOLLIN | EPOLLOUT; + ev.events = EPOLLIN; ev.data.fd = s->GetSock(); if (epoll_ctl(EngineHandle, EPOLL_CTL_ADD, ev.data.fd, &ev) == -1) @@ -80,6 +80,32 @@ class SocketEngineEPoll : public SocketEngineBase --SocketCount; } + void MarkWriteable(Socket *s) + { + epoll_event ev; + + memset(&ev, 0, sizeof(ev)); + + ev.events = EPOLLIN | EPOLLOUT; + ev.data.fd = s->GetSock(); + + if (epoll_ctl(EngineHandle, EPOLL_CTL_ADD, ev.data.fd, &ev) == -1) + Alog() << "Unable to mark fd " << ev.data.fd << " as writable in socketengine epoll: " << strerror(errno); + } + + void ClearWriteable(Socket *s) + { + epoll_event ev; + + memset(&ev, 0, sizeof(ev)); + + ev.events = EPOLLIN; + ev.data.fd = s->GetSock(); + + if (epoll_ctl(EngineHandle, EPOLL_CTL_ADD, ev.data.fd, &ev) == -1) + Alog() << "Unable to mark fd " << ev.data.fd << " as unwritable in socketengine epoll: " << strerror(errno); + } + void Process() { int total = epoll_wait(EngineHandle, events, max - 1, Config.ReadTimeout * 1000); |