diff --git a/src/network/NetworkConnection.cpp b/src/network/NetworkConnection.cpp index 4d5081deba..5844f4bf53 100644 --- a/src/network/NetworkConnection.cpp +++ b/src/network/NetworkConnection.cpp @@ -102,15 +102,16 @@ bool NetworkConnection::SendPacket(NetworkPacket& packet) const void * buffer = &tosend[packet.transferred]; size_t bufferSize = tosend.size() - packet.transferred; - if (Socket->SendData(buffer, bufferSize)) + size_t sent = Socket->SendData(buffer, bufferSize); + if (sent > 0) + { + packet.transferred += sent; + } + if (packet.transferred == tosend.size()) { - packet.transferred += bufferSize; return true; } - else - { - return false; - } + return false; } void NetworkConnection::QueuePacket(std::unique_ptr packet, bool front) diff --git a/src/network/TcpSocket.cpp b/src/network/TcpSocket.cpp index 3e3350a729..c1329717e6 100644 --- a/src/network/TcpSocket.cpp +++ b/src/network/TcpSocket.cpp @@ -339,7 +339,7 @@ public: } } - bool SendData(const void * buffer, size_t size) override + size_t SendData(const void * buffer, size_t size) override { if (_status != SOCKET_STATUS_CONNECTED) { @@ -354,11 +354,11 @@ public: int sentBytes = send(_socket, (const char *)bufferStart, (int)remainingSize, FLAG_NO_PIPE); if (sentBytes == SOCKET_ERROR) { - return false; + return totalSent; } totalSent += sentBytes; } while (totalSent < size); - return true; + return totalSent; } NETWORK_READPACKET ReceiveData(void * buffer, size_t size, size_t * sizeReceived) override diff --git a/src/network/TcpSocket.h b/src/network/TcpSocket.h index 61cbe32a70..3e248951fa 100644 --- a/src/network/TcpSocket.h +++ b/src/network/TcpSocket.h @@ -53,7 +53,7 @@ public: virtual void Connect(const char * address, uint16 port) abstract; virtual void ConnectAsync(const char * address, uint16 port) abstract; - virtual bool SendData(const void * buffer, size_t size) abstract; + virtual size_t SendData(const void * buffer, size_t size) abstract; virtual NETWORK_READPACKET ReceiveData(void * buffer, size_t size, size_t * sizeReceived) abstract; virtual void Disconnect() abstract;