diff options
author | rubidium <rubidium@openttd.org> | 2009-03-08 16:14:14 +0000 |
---|---|---|
committer | rubidium <rubidium@openttd.org> | 2009-03-08 16:14:14 +0000 |
commit | 4a5c4f6089b344c4e385a1f1e4d26545f46f4984 (patch) | |
tree | 0b11045d12891665ce7c0422690d8bca8e749547 | |
parent | e124aa8fd62f3260d2a127aab1e9bc6f5a303480 (diff) | |
download | openttd-4a5c4f6089b344c4e385a1f1e4d26545f46f4984.tar.xz |
(svn r15644) -Fix [FS#2710]: closing a network connection twice in the case that sending packets starts failing while disconnecting
-rw-r--r-- | src/network/network.cpp | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/network/network.cpp b/src/network/network.cpp index 542d4f52c..f3b036592 100644 --- a/src/network/network.cpp +++ b/src/network/network.cpp @@ -422,7 +422,14 @@ static NetworkClientSocket *NetworkAllocClient(SOCKET s) // Close a connection void NetworkCloseClient(NetworkClientSocket *cs) { - assert(cs->sock != INVALID_SOCKET); + /* + * Sending a message just before leaving the game calls cs->Send_Packets. + * This might invoke this function, which means that when we close the + * connection after cs->Send_Packets we will close an already closed + * connection. This handles that case gracefully without having to make + * that code any more complex or more aware of the validity of the socket. + */ + if (cs->sock == INVALID_SOCKET) return; DEBUG(net, 1, "Closed client connection %d", cs->client_id); |