diff options
Diffstat (limited to 'louloulibs/network')
-rw-r--r-- | louloulibs/network/poller.cpp | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/louloulibs/network/poller.cpp b/louloulibs/network/poller.cpp index 0559644..26e5a8f 100644 --- a/louloulibs/network/poller.cpp +++ b/louloulibs/network/poller.cpp @@ -171,21 +171,22 @@ int Poller::poll(const std::chrono::milliseconds& timeout) assert(static_cast<unsigned int>(nb_events) <= this->nfds); for (size_t i = 0; i <= this->nfds && nb_events != 0; ++i) { + auto socket_handler = this->socket_handlers.at(this->fds[i].fd); if (this->fds[i].revents == 0) continue; - else if (this->fds[i].revents & POLLIN) + else if (this->fds[i].revents & POLLIN && socket_handler->is_connected()) { - auto socket_handler = this->socket_handlers.at(this->fds[i].fd); socket_handler->on_recv(); nb_events--; } - else if (this->fds[i].revents & POLLOUT) + else if (this->fds[i].revents & POLLOUT && socket_handler->is_connected()) { - auto socket_handler = this->socket_handlers.at(this->fds[i].fd); - if (socket_handler->is_connected()) socket_handler->on_send(); - else - socket_handler->connect(); + nb_events--; + } + else if (this->fds[i].revents & POLLOUT) + { + socket_handler->connect(); nb_events--; } } |