diff options
author | Adam <Adam@anope.org> | 2010-09-09 23:43:11 -0400 |
---|---|---|
committer | Adam <Adam@anope.org> | 2010-09-09 23:43:11 -0400 |
commit | 46813ccb8c6ab572b8a9ff0a39afb1d92dc4482b (patch) | |
tree | 562da502a102230ce207bbe921fdc978ee71e20c /modules/socketengines/m_socketengine_epoll.cpp | |
parent | fdd196e50b4616ac377bd0ee0ae5ce6c57b657ee (diff) |
Added an asynchronous DNS system and m_dnsbl, which checks clients against DNS blacklists.
Rewrote internal handling of IPs, we now properly support users using IPv6.
Fixed a few problems with the UnrealIRCd protocol module.
Diffstat (limited to 'modules/socketengines/m_socketengine_epoll.cpp')
-rw-r--r-- | modules/socketengines/m_socketengine_epoll.cpp | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/modules/socketengines/m_socketengine_epoll.cpp b/modules/socketengines/m_socketengine_epoll.cpp index 5a2561b25..5edc40502 100644 --- a/modules/socketengines/m_socketengine_epoll.cpp +++ b/modules/socketengines/m_socketengine_epoll.cpp @@ -80,8 +80,11 @@ class SocketEngineEPoll : public SocketEngineBase --SocketCount; } - void MarkWriteable(Socket *s) + void MarkWritable(Socket *s) { + if (s->HasFlag(SF_WRITABLE)) + return; + epoll_event ev; memset(&ev, 0, sizeof(ev)); @@ -91,10 +94,15 @@ class SocketEngineEPoll : public SocketEngineBase 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: " << strerror(errno); + else + s->SetFlag(SF_WRITABLE); } - void ClearWriteable(Socket *s) + void ClearWriteble(Socket *s) { + if (!s->HasFlag(SF_WRITABLE)) + return; + epoll_event ev; memset(&ev, 0, sizeof(ev)); @@ -104,6 +112,8 @@ class SocketEngineEPoll : public SocketEngineBase 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: " << strerror(errno); + else + s->UnsetFlag(SF_WRITABLE); } void Process() @@ -150,7 +160,7 @@ class SocketEngineEPoll : public SocketEngineBase class ModuleSocketEngineEPoll : public Module { - SocketEngineEPoll *engine; + SocketEngineEPoll engine; public: ModuleSocketEngineEPoll(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator) @@ -159,13 +169,11 @@ class ModuleSocketEngineEPoll : public Module this->SetPermanent(true); this->SetType(SOCKETENGINE); - engine = new SocketEngineEPoll(); - SocketEngine = engine; + SocketEngine = &engine; } ~ModuleSocketEngineEPoll() { - delete engine; SocketEngine = NULL; } }; |