From adfd64803108b0f418a5f5cb4ea96b25d2eaa45c Mon Sep 17 00:00:00 2001 From: rubidium Date: Sat, 12 Feb 2011 21:09:34 +0000 Subject: (svn r22068) -Codechange/Fix: return "connection lost" instead of "okay" when SendPackets closed the connection --- src/network/core/tcp.cpp | 21 ++++++++------------- src/network/core/tcp.h | 11 +++++++++-- 2 files changed, 17 insertions(+), 15 deletions(-) (limited to 'src/network/core') diff --git a/src/network/core/tcp.cpp b/src/network/core/tcp.cpp index 66f19107c..9a6704006 100644 --- a/src/network/core/tcp.cpp +++ b/src/network/core/tcp.cpp @@ -90,14 +90,14 @@ void NetworkTCPSocketHandler::SendPacket(Packet *packet) * @return \c true if a (part of a) packet could be sent and * the connection is not closed yet. */ -bool NetworkTCPSocketHandler::SendPackets(bool closing_down) +SendPacketsState NetworkTCPSocketHandler::SendPackets(bool closing_down) { ssize_t res; Packet *p; /* We can not write to this socket!! */ - if (!this->writable) return false; - if (!this->IsConnected()) return false; + if (!this->writable) return SPS_NONE_SENT; + if (!this->IsConnected()) return SPS_CLOSED; p = this->packet_queue; while (p != NULL) { @@ -110,14 +110,14 @@ bool NetworkTCPSocketHandler::SendPackets(bool closing_down) DEBUG(net, 0, "send failed with error %d", err); this->CloseConnection(); } - return false; + return SPS_CLOSED; } - return true; + return SPS_PARTLY_SENT; } if (res == 0) { /* Client/server has left us :( */ if (!closing_down) this->CloseConnection(); - return false; + return SPS_CLOSED; } p->pos += res; @@ -129,11 +129,11 @@ bool NetworkTCPSocketHandler::SendPackets(bool closing_down) delete p; p = this->packet_queue; } else { - return true; + return SPS_PARTLY_SENT; } } - return true; + return SPS_ALL_SENT; } /** @@ -216,11 +216,6 @@ Packet *NetworkTCPSocketHandler::ReceivePacket() return p; } -bool NetworkTCPSocketHandler::IsPacketQueueEmpty() -{ - return this->packet_queue == NULL; -} - /** * Check whether this socket can send or receive something. * @return \c true when there is something to receive. diff --git a/src/network/core/tcp.h b/src/network/core/tcp.h index d14de7cc1..2092e1e32 100644 --- a/src/network/core/tcp.h +++ b/src/network/core/tcp.h @@ -19,6 +19,14 @@ #ifdef ENABLE_NETWORK +/** The states of sending the packets. */ +enum SendPacketsState { + SPS_CLOSED, ///< The connection got closed. + SPS_NONE_SENT, ///< The buffer is still full, so no (parts of) packets could be sent. + SPS_PARTLY_SENT, ///< The packets are partly sent; there are more packets to be sent in the queue. + SPS_ALL_SENT, ///< All packets in the queue are sent. +}; + /** Base socket handler for all TCP sockets */ class NetworkTCPSocketHandler : public NetworkSocketHandler { private: @@ -36,8 +44,7 @@ public: virtual NetworkRecvStatus CloseConnection(bool error = true); virtual void SendPacket(Packet *packet); - bool SendPackets(bool closing_down = false); - bool IsPacketQueueEmpty(); + SendPacketsState SendPackets(bool closing_down = false); virtual Packet *ReceivePacket(); -- cgit v1.2.3-54-g00ecf