diff options
author | rubidium <rubidium@openttd.org> | 2011-02-12 21:09:34 +0000 |
---|---|---|
committer | rubidium <rubidium@openttd.org> | 2011-02-12 21:09:34 +0000 |
commit | adfd64803108b0f418a5f5cb4ea96b25d2eaa45c (patch) | |
tree | 8499c1ad40825fb458503fe9f84c7e97dc2ba691 /src/network/network_server.cpp | |
parent | 92d0d6d10b815700e72869e87da044ffafd1c9bb (diff) | |
download | openttd-adfd64803108b0f418a5f5cb4ea96b25d2eaa45c.tar.xz |
(svn r22068) -Codechange/Fix: return "connection lost" instead of "okay" when SendPackets closed the connection
Diffstat (limited to 'src/network/network_server.cpp')
-rw-r--r-- | src/network/network_server.cpp | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/src/network/network_server.cpp b/src/network/network_server.cpp index 071903797..d465078a7 100644 --- a/src/network/network_server.cpp +++ b/src/network/network_server.cpp @@ -573,13 +573,23 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendMap() if (this->savegame_mutex != NULL) this->savegame_mutex->EndCritical(); - /* Send all packets (forced) and check if we have send it all */ - if (this->SendPackets() && this->IsPacketQueueEmpty()) { - /* All are sent, increase the sent_packets */ - if (this->savegame_packets != NULL) sent_packets *= 2; - } else { - /* Not everything is sent, decrease the sent_packets */ - if (sent_packets > 1) sent_packets /= 2; + switch (this->SendPackets()) { + case SPS_CLOSED: + return NETWORK_RECV_STATUS_CONN_LOST; + + case SPS_ALL_SENT: + /* All are sent, increase the sent_packets */ + if (this->savegame_packets != NULL) sent_packets *= 2; + break; + + case SPS_PARTLY_SENT: + /* Only a part is sent; leave the transmission state. */ + break; + + case SPS_NONE_SENT: + /* Not everything is sent, decrease the sent_packets */ + if (sent_packets > 1) sent_packets /= 2; + break; } } return NETWORK_RECV_STATUS_OKAY; |