diff --git a/src/add-ons/kernel/network/protocols/tcp/TCPEndpoint.cpp b/src/add-ons/kernel/network/protocols/tcp/TCPEndpoint.cpp index 67a9bb025a..84df621a3f 100644 --- a/src/add-ons/kernel/network/protocols/tcp/TCPEndpoint.cpp +++ b/src/add-ons/kernel/network/protocols/tcp/TCPEndpoint.cpp @@ -666,11 +666,17 @@ TCPEndpoint::ReadData(size_t numBytes, uint32 flags, net_buffer** _buffer) if (numBytes < fReceiveQueue.Available()) fReceiveList.Signal(); - ssize_t receivedBytes = fReceiveQueue.Get(numBytes, - (flags & MSG_PEEK) == 0, _buffer); + bool clone = (flags & MSG_PEEK); + + ssize_t receivedBytes = fReceiveQueue.Get(numBytes, !clone, _buffer); TRACE(" ReadData(): %lu bytes kept.", fReceiveQueue.Available()); + if (!clone) { + // we are opening the window, check if we should send an ACK + _SendQueued(); + } + return receivedBytes; }