~singpolyma/biboumi

d834d6ed0647ba7e51e81f600fe259156e2b8070 — Florent Le Coz 11 years ago f2f9461
Exit the poller when it handles no connection at all
M src/irc/irc_client.cpp => src/irc/irc_client.cpp +0 -1
@@ 21,7 21,6 @@ void IrcClient::on_connected()
void IrcClient::on_connection_close()
{
  std::cout << "Connection closed by remote server." << std::endl;
  this->close();
}

void IrcClient::parse_in_buffer()

M src/network/poller.cpp => src/network/poller.cpp +4 -1
@@ 89,9 89,11 @@ void Poller::stop_watching_send_events(const SocketHandler* const socket_handler
  throw std::runtime_error("Cannot watch a non-registered socket for send events");
}

void Poller::poll()
bool Poller::poll()
{
#if POLLER == POLL
  if (this->nfds == 0)
    return false;
  int res = ::poll(this->fds, this->nfds, -1);
  if (res < 0)
    {


@@ 119,4 121,5 @@ void Poller::poll()
        }
    }
#endif
  return true;
}

M src/network/poller.hpp => src/network/poller.hpp +2 -1
@@ 57,8 57,9 @@ public:
  /**
   * Wait for all watched events, and call the SocketHandlers' callbacks
   * when one is ready.
   * Returns false if there are 0 SocketHandler in the list.
   */
  void poll();
  bool poll();

private:
  /**

M src/network/socket_handler.cpp => src/network/socket_handler.cpp +4 -1
@@ 66,7 66,10 @@ void SocketHandler::on_recv()

  ssize_t size = ::recv(this->socket, buf, 4096, 0);
  if (0 == size)
    this->on_connection_close();
    {
      this->on_connection_close();
      this->close();
    }
  else if (-1 == static_cast<ssize_t>(size))
    throw std::runtime_error("Error reading from socket");
  else