summaryrefslogtreecommitdiff
path: root/src/network/network_server.cpp
diff options
context:
space:
mode:
authorrubidium <rubidium@openttd.org>2011-02-12 21:09:34 +0000
committerrubidium <rubidium@openttd.org>2011-02-12 21:09:34 +0000
commitadfd64803108b0f418a5f5cb4ea96b25d2eaa45c (patch)
tree8499c1ad40825fb458503fe9f84c7e97dc2ba691 /src/network/network_server.cpp
parent92d0d6d10b815700e72869e87da044ffafd1c9bb (diff)
downloadopenttd-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.cpp24
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;