diff options
-rw-r--r-- | src/network/network_client.cpp | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/src/network/network_client.cpp b/src/network/network_client.cpp index a66786dad..e083e6c1a 100644 --- a/src/network/network_client.cpp +++ b/src/network/network_client.cpp @@ -211,15 +211,22 @@ void ClientNetworkGameSocketHandler::ClientError(NetworkRecvStatus res) default: errorno = NETWORK_ERROR_GENERAL; break; } - /* This means we fucked up and the server closed the connection */ - if (res != NETWORK_RECV_STATUS_SERVER_ERROR && res != NETWORK_RECV_STATUS_SERVER_FULL && - res != NETWORK_RECV_STATUS_SERVER_BANNED) { + if (res == NETWORK_RECV_STATUS_SERVER_ERROR || res == NETWORK_RECV_STATUS_SERVER_FULL || + res == NETWORK_RECV_STATUS_SERVER_BANNED) { + /* This means the server closed the connection. Emergency save is + * already created if this was appropriate during handling of the + * disconnect. */ + this->CloseConnection(res); + } else { + /* This means we as client made a boo-boo. */ SendError(errorno); - } - this->CloseConnection(res); - - ClientNetworkEmergencySave(); + /* Close connection before we make an emergency save, as the save can + * take a bit of time; better that the server doesn't stall while we + * are doing the save, and already disconnects us. */ + this->CloseConnection(res); + ClientNetworkEmergencySave(); + } _switch_mode = SM_MENU; _networking = false; |