From 4fe1c9233c61b75018f7b49d069aca6de76cc9f5 Mon Sep 17 00:00:00 2001 From: Adam Date: Sun, 1 Aug 2010 20:43:48 -0400 Subject: [PATCH] Made the epoll socket engine handle MarkWriteable and ClearWriteable events --- .../socketengines/m_socketengine_epoll.cpp | 28 ++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) 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);