# HG changeset patch # User rubidium # Date 2011-04-30 17:41:14 # Node ID a9b2554a5d7980006237f77bc0e47b44215fa893 # Parent 43c5f4ff818eb01075d185cfa8799ef5ac145f5d (svn r22387) -Fix-ish [FS#4601]: Windows' recv seems to return "graceful closed" before having passed the remaining buffer which causes OpenTTD to think all connections are "incorrectly" terminated, i.e. without the "I'm leaving" packet from the client. So let the client wait a tiny bit after sending the "I'm leaving" packet and before gracefully closing the connection diff --git a/src/network/network_client.cpp b/src/network/network_client.cpp --- a/src/network/network_client.cpp +++ b/src/network/network_client.cpp @@ -25,6 +25,7 @@ #include "../company_gui.h" #include "../core/random_func.hpp" #include "../date_func.h" +#include "../gfx_func.h" #include "../gui.h" #include "../rev.h" #include "network.h" @@ -152,6 +153,12 @@ NetworkRecvStatus ClientNetworkGameSocke this->SendPackets(true); + /* Wait a number of ticks so our leave message can reach the server. + * This is especially needed for Windows servers as they seem to get + * the "socket is closed" message before receiving our leave message, + * which would trigger the server to close the connection as well. */ + CSleep(3 * MILLISECONDS_PER_TICK); + delete this->GetInfo(); delete this;