M src/irc/irc_client.cpp => src/irc/irc_client.cpp +2 -0
@@ 46,6 46,8 @@ void IrcClient::on_connection_close()
{
static const std::string message = "Connection closed by remote server.";
this->send_gateway_message(message);
+ const IrcMessage error{"ERROR", {message}};
+ this->on_error(error);
log_warning(message);
}
M src/network/poller.cpp => src/network/poller.cpp +4 -2
@@ 155,13 155,15 @@ 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);
- socket_handler->on_recv();
+ if (socket_handler->is_connected())
+ socket_handler->on_recv();
nb_events--;
}
else if (this->fds[i].revents & POLLOUT)
{
auto socket_handler = this->socket_handlers.at(this->fds[i].fd);
- socket_handler->on_send();
+ if (socket_handler->is_connected())
+ socket_handler->on_send();
nb_events--;
}
}
M src/network/socket_handler.cpp => src/network/socket_handler.cpp +1 -0
@@ 100,6 100,7 @@ void SocketHandler::on_send()
if (res == -1)
{
log_error("send failed: " << strerror(errno));
+ this->on_connection_close();
this->close();
}
else