Exit the poller when it handles no connection at all
This commit is contained in:
@@ -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()
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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:
|
||||
/**
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user