From 9ed6524e033cd6086c4ad4c1c567929df7838bac Mon Sep 17 00:00:00 2001 From: Fernando Rozenblit Date: Fri, 11 Oct 2019 19:31:13 +0200 Subject: [PATCH] Changed socket error from an exception to only log + disconnect client --- pol-core/pol/network/client.h | 4 ++-- pol-core/pol/network/clientthread.cpp | 12 +++++++----- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/pol-core/pol/network/client.h b/pol-core/pol/network/client.h index c5b246b21a..94e9aad40d 100644 --- a/pol-core/pol/network/client.h +++ b/pol-core/pol/network/client.h @@ -293,13 +293,13 @@ inline void Client::forceDisconnect() // Checks whether the client is disconnected, and not only marked for disconnection inline bool Client::isReallyConnected() const { - return !( this->disconnect ); + return !this->disconnect && this->csocket != INVALID_SOCKET; } // Checks for both planned and executed disconnections inline bool Client::isConnected() const { - return !( this->preDisconnect || this->disconnect ); + return !this->preDisconnect && this->isReallyConnected(); } inline bool Client::isActive() const diff --git a/pol-core/pol/network/clientthread.cpp b/pol-core/pol/network/clientthread.cpp index cbc0158d6e..8c051d5e31 100644 --- a/pol-core/pol/network/clientthread.cpp +++ b/pol-core/pol/network/clientthread.cpp @@ -92,11 +92,13 @@ bool client_io_thread( Network::Client* client, bool login ) checkpoint = 1; if ( !clientpoller.prepare( client->have_queued_data() ) ) { + POLLOG.Format( "Client#{}: ERROR - couldn't poll socket={}\n" ) + << client->instance_ << client->csocket; + if ( client->csocket != INVALID_SOCKET ) client->forceDisconnect(); - throw std::runtime_error( - "couldn't prepare for polling client socket - limit is reached or invalid socket" ); + break; } checkpoint = 2; @@ -266,9 +268,9 @@ bool client_io_thread( Network::Client* client, bool login ) CLIENT_CHECKPOINT( 9 ); PolLock lck; client->unregister(); - INFO_PRINT << "Client disconnected from " << client->ipaddrAsString() - << " (" << networkManager.clients.size() << "/" - << networkManager.getNumberOfLoginClients() << " connections)\n"; + INFO_PRINT << "Client disconnected from " << client->ipaddrAsString() << " (" + << networkManager.clients.size() << "/" << networkManager.getNumberOfLoginClients() + << " connections)\n"; CoreSetSysTrayToolTip( Clib::tostring( networkManager.clients.size() ) + " clients connected", ToolTipPrioritySystem );