summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam <Adam@anope.org>2010-12-27 00:41:04 -0500
committerAdam <Adam@anope.org>2010-12-27 00:41:04 -0500
commitfce491e18c654c84f7d379beb202faa28f3b2b64 (patch)
tree70732280cb5df08376abf2721b62704a3741f95b
parent87d0fc8bb514ba727bbf4822fe21a8a70511987d (diff)
Made socket engine stop processing once all sockets have been checked
-rw-r--r--modules/socketengines/m_socketengine_poll.cpp6
-rw-r--r--modules/socketengines/m_socketengine_select.cpp5
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))