summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/network/network_client.cpp21
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;