(svn r22068) -Codechange/Fix: return "connection lost" instead of "okay" when SendPackets closed the connection

This commit is contained in:
rubidium
2011-02-12 21:09:34 +00:00
parent 6248138e67
commit c70499b4b6
3 changed files with 34 additions and 22 deletions

View File

@@ -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.

View File

@@ -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();