diff options
author | Adam <Adam@anope.org> | 2010-12-27 00:41:04 -0500 |
---|---|---|
committer | Adam <Adam@anope.org> | 2010-12-27 00:41:04 -0500 |
commit | fce491e18c654c84f7d379beb202faa28f3b2b64 (patch) | |
tree | 70732280cb5df08376abf2721b62704a3741f95b | |
parent | 87d0fc8bb514ba727bbf4822fe21a8a70511987d (diff) |
Made socket engine stop processing once all sockets have been checked
-rw-r--r-- | modules/socketengines/m_socketengine_poll.cpp | 6 | ||||
-rw-r--r-- | modules/socketengines/m_socketengine_select.cpp | 5 |
2 files changed, 9 insertions, 2 deletions
diff --git a/modules/socketengines/m_socketengine_poll.cpp b/modules/socketengines/m_socketengine_poll.cpp index 7a252f1f0..5b44f8674 100644 --- a/modules/socketengines/m_socketengine_poll.cpp +++ b/modules/socketengines/m_socketengine_poll.cpp @@ -137,9 +137,13 @@ class SocketEnginePoll : public SocketEngineBase return; } - for (int i = 0; i < total; ++i) + 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)) diff --git a/modules/socketengines/m_socketengine_select.cpp b/modules/socketengines/m_socketengine_select.cpp index b1c1c065f..3ea9eab27 100644 --- a/modules/socketengines/m_socketengine_select.cpp +++ b/modules/socketengines/m_socketengine_select.cpp @@ -73,10 +73,13 @@ class SocketEngineSelect : public SocketEngineBase } else if (sresult) { - for (std::map<int, Socket *>::const_iterator it = Sockets.begin(), it_end = Sockets.end(); it != it_end; ++it) + int processed = 0; + for (std::map<int, Socket *>::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)) |