summaryrefslogtreecommitdiff
path: root/src/network/poller.cpp
diff options
context:
space:
mode:
authorFlorent Le Coz <louiz@louiz.org>2014-02-22 21:42:24 +0100
committerFlorent Le Coz <louiz@louiz.org>2014-02-22 21:42:24 +0100
commit99aba5667d0d7ba6657f9c175a9342126bc4b0f2 (patch)
tree2448f73a7e4129f1a8f9f51e230dd00111452a30 /src/network/poller.cpp
parent61ca40fa0e6c819aa72f3f2364667c7b990855d4 (diff)
downloadbiboumi-99aba5667d0d7ba6657f9c175a9342126bc4b0f2.tar.gz
biboumi-99aba5667d0d7ba6657f9c175a9342126bc4b0f2.tar.bz2
biboumi-99aba5667d0d7ba6657f9c175a9342126bc4b0f2.tar.xz
biboumi-99aba5667d0d7ba6657f9c175a9342126bc4b0f2.zip
Connection to servers does not block the process anymore
Diffstat (limited to 'src/network/poller.cpp')
-rw-r--r--src/network/poller.cpp12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/network/poller.cpp b/src/network/poller.cpp
index 010dd58..dbea856 100644
--- a/src/network/poller.cpp
+++ b/src/network/poller.cpp
@@ -155,8 +155,7 @@ int Poller::poll(const std::chrono::milliseconds& timeout)
else if (this->fds[i].revents & POLLIN)
{
auto socket_handler = this->socket_handlers.at(this->fds[i].fd);
- if (socket_handler->is_connected())
- socket_handler->on_recv();
+ socket_handler->on_recv();
nb_events--;
}
else if (this->fds[i].revents & POLLOUT)
@@ -164,6 +163,8 @@ int Poller::poll(const std::chrono::milliseconds& timeout)
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--;
}
}
@@ -185,7 +186,12 @@ int Poller::poll(const std::chrono::milliseconds& timeout)
if (revents[i].events & EPOLLIN)
socket_handler->on_recv();
if (revents[i].events & EPOLLOUT)
- socket_handler->on_send();
+ {
+ if (socket_handler->is_connected())
+ socket_handler->on_send();
+ else
+ socket_handler->connect();
+ }
}
return nb_events;
#endif