summaryrefslogtreecommitdiff
path: root/src/network/core
diff options
context:
space:
mode:
authorrubidium <rubidium@openttd.org>2013-07-13 09:26:11 +0000
committerrubidium <rubidium@openttd.org>2013-07-13 09:26:11 +0000
commit5eac3a77d20c3a838203bd261b05601fa0c7b6ee (patch)
treee28365da85a6103365d043717c56e2d1da088b37 /src/network/core
parent8f89cd6dd3dff7c36c6080de03b4ffc102f1b771 (diff)
downloadopenttd-5eac3a77d20c3a838203bd261b05601fa0c7b6ee.tar.xz
(svn r25597) -Fix [FS#5635]: [Content] When the server closed the connection, the client would for eternity try to read a packet and never timeout making it impossible to reconnect
Diffstat (limited to 'src/network/core')
-rw-r--r--src/network/core/tcp_content.cpp10
-rw-r--r--src/network/core/tcp_content.h2
2 files changed, 8 insertions, 4 deletions
diff --git a/src/network/core/tcp_content.cpp b/src/network/core/tcp_content.cpp
index ecef92a4f..8a4604feb 100644
--- a/src/network/core/tcp_content.cpp
+++ b/src/network/core/tcp_content.cpp
@@ -183,8 +183,9 @@ bool NetworkContentSocketHandler::HandlePacket(Packet *p)
/**
* Receive a packet at TCP level
+ * @return Whether at least one packet was received.
*/
-void NetworkContentSocketHandler::ReceivePackets()
+bool NetworkContentSocketHandler::ReceivePackets()
{
/*
* We read only a few of the packets. This as receiving packets can be expensive
@@ -206,12 +207,15 @@ void NetworkContentSocketHandler::ReceivePackets()
* What arbitrary number to choose is the ultimate question though.
*/
Packet *p;
- int i = 42;
+ static const int MAX_PACKETS_TO_RECEIVE = 42;
+ int i = MAX_PACKETS_TO_RECEIVE;
while (--i != 0 && (p = this->ReceivePacket()) != NULL) {
bool cont = this->HandlePacket(p);
delete p;
- if (!cont) return;
+ if (!cont) return true;
}
+
+ return i != MAX_PACKETS_TO_RECEIVE - 1;
}
diff --git a/src/network/core/tcp_content.h b/src/network/core/tcp_content.h
index 5ad6ac5f4..a506439da 100644
--- a/src/network/core/tcp_content.h
+++ b/src/network/core/tcp_content.h
@@ -206,7 +206,7 @@ public:
/** On destructing of this class, the socket needs to be closed */
virtual ~NetworkContentSocketHandler() { this->Close(); }
- void ReceivePackets();
+ bool ReceivePackets();
};
#ifndef OPENTTD_MSU