~singpolyma/biboumi

b47179f1256f2a3fe6ce0d8f30eceb0f91b33b2e — Florent Le Coz 8 years ago b29d944
Fix the ordering of poll callbacks, with ppoll too
1 files changed, 8 insertions(+), 7 deletions(-)

M louloulibs/network/poller.cpp
M louloulibs/network/poller.cpp => louloulibs/network/poller.cpp +8 -7
@@ 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--;
        }
    }