Delete the timeout event using the correct socket number, instead of -1
Was causing the event to not be removed in case of connection failure, which lead to a dangling timed event named “timeout-1”, which was called later, by some other SocketHandler for which even the socket creation failed (so, its socket is -1), with a pointer to the previous SocketHandler which has disappeared for a long time: segmentation fault etc.
This commit is contained in:
@@ -276,6 +276,8 @@ void SocketHandler::on_send()
|
|||||||
|
|
||||||
void SocketHandler::close()
|
void SocketHandler::close()
|
||||||
{
|
{
|
||||||
|
TimedEventsManager::instance().cancel("connection_timeout"s +
|
||||||
|
std::to_string(this->socket));
|
||||||
if (this->connected || this->connecting)
|
if (this->connected || this->connecting)
|
||||||
this->poller->remove_socket_handler(this->get_socket());
|
this->poller->remove_socket_handler(this->get_socket());
|
||||||
if (this->socket != -1)
|
if (this->socket != -1)
|
||||||
@@ -288,8 +290,6 @@ void SocketHandler::close()
|
|||||||
this->in_buf.clear();
|
this->in_buf.clear();
|
||||||
this->out_buf.clear();
|
this->out_buf.clear();
|
||||||
this->port.clear();
|
this->port.clear();
|
||||||
TimedEventsManager::instance().cancel("connection_timeout"s +
|
|
||||||
std::to_string(this->socket));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
socket_t SocketHandler::get_socket() const
|
socket_t SocketHandler::get_socket() const
|
||||||
|
|||||||
Reference in New Issue
Block a user