From 1474ff10ac782f73d9b8185523fe5ada75ce0a19 Mon Sep 17 00:00:00 2001 From: dongresource Date: Fri, 11 Dec 2020 22:49:06 +0100 Subject: [PATCH] Slight adjustments to the poll() loop Recheck the entry at the current index after we remove one. This isn't strictly necessary, since the next pass will get it anyway. Using a vector as opposed to our own realloc()'d array means indexing beyond the size() is undefined behavior, so it's better to be safe. --- src/CNProtocol.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/CNProtocol.cpp b/src/CNProtocol.cpp index 8174244..ab887e0 100644 --- a/src/CNProtocol.cpp +++ b/src/CNProtocol.cpp @@ -351,8 +351,6 @@ void CNServer::removePollFD(int i) { } void CNServer::start() { - int oldnfds; - std::cout << "Starting server at *:" << port << std::endl; while (active) { // the timeout is to ensure shard timers are ticking @@ -367,9 +365,7 @@ void CNServer::start() { terminate(0); } - oldnfds = fds.size(); - - for (int i = 0; i < oldnfds && n > 0; i++) { + for (int i = 0; i < fds.size() && n > 0; i++) { if (fds[i].revents == 0) continue; // nothing in this one; don't decrement n @@ -427,6 +423,9 @@ void CNServer::start() { delete cSock; removePollFD(i); + + // a new entry was moved to this position, so we check it again + i--; } } }