summaryrefslogtreecommitdiff
path: root/modules/socketengines/m_socketengine_epoll.cpp
diff options
context:
space:
mode:
authorAdam <Adam@anope.org>2010-08-01 20:43:48 -0400
committerAdam <Adam@anope.org>2010-08-01 20:43:48 -0400
commit4fe1c9233c61b75018f7b49d069aca6de76cc9f5 (patch)
tree26369ccd40f00dd4fbcb648357eb41b5ac8699c1 /modules/socketengines/m_socketengine_epoll.cpp
parent90976b66728fcc671f3ecc4a2d39e438d6d8bcb6 (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.cpp28
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);