Fix the ordering of poll callbacks (recv, connect, send)

Because if we have a send event to signal the connection sucess + a recv
event to signal something to read on the socket, we need to first finish the
connect process before reading the available data. That’s what we do now.
This commit is contained in:
Florent Le Coz
2016-02-22 17:03:15 +01:00
parent 4cd97f7e88
commit 6ee80ad268
+3 -6
View File
@@ -205,16 +205,13 @@ int Poller::poll(const std::chrono::milliseconds& timeout)
for (int i = 0; i < nb_events; ++i) for (int i = 0; i < nb_events; ++i)
{ {
auto socket_handler = static_cast<SocketHandler*>(revents[i].data.ptr); auto socket_handler = static_cast<SocketHandler*>(revents[i].data.ptr);
if (revents[i].events & EPOLLIN) if (revents[i].events & EPOLLIN && socket_handler->is_connected())
socket_handler->on_recv(); socket_handler->on_recv();
else if (revents[i].events & EPOLLOUT) else if (revents[i].events & EPOLLOUT && socket_handler->is_connected())
{
if (socket_handler->is_connected())
socket_handler->on_send(); socket_handler->on_send();
else else if (revents[i].events & EPOLLOUT)
socket_handler->connect(); socket_handler->connect();
} }
}
return nb_events; return nb_events;
#endif #endif
} }