diff --git a/src/add-ons/kernel/network/protocols/tcp/TCPEndpoint.cpp b/src/add-ons/kernel/network/protocols/tcp/TCPEndpoint.cpp index 9881719088..0858cfc3ff 100644 --- a/src/add-ons/kernel/network/protocols/tcp/TCPEndpoint.cpp +++ b/src/add-ons/kernel/network/protocols/tcp/TCPEndpoint.cpp @@ -1011,6 +1011,9 @@ TCPEndpoint::ReadData(size_t numBytes, uint32 flags, net_buffer** _buffer) TRACE(" ReadData(): %" B_PRIuSIZE " bytes kept.", fReceiveQueue.Available()); + if (fReceiveQueue.Available() == 0 && fState == FINISH_RECEIVED) + socket->receive.low_water_mark = 0; + // if we are opening the window, check if we should send an ACK if (!clone) SendAcknowledge(false); @@ -1438,7 +1441,7 @@ TCPEndpoint::_ShouldReceive() const return false; return fState == ESTABLISHED || fState == FINISH_SENT - || fState == FINISH_ACKNOWLEDGED; + || fState == FINISH_ACKNOWLEDGED || fState == FINISH_RECEIVED; } diff --git a/src/add-ons/kernel/network/protocols/tcp/tcp.cpp b/src/add-ons/kernel/network/protocols/tcp/tcp.cpp index 8d2645eddb..3425d1f6bd 100644 --- a/src/add-ons/kernel/network/protocols/tcp/tcp.cpp +++ b/src/add-ons/kernel/network/protocols/tcp/tcp.cpp @@ -429,7 +429,7 @@ add_tcp_header(net_address_module_info* addressModule, optionsLength); } - TRACE(("add_tcp_header(): buffer %p, flags 0x%x, seq %lu, ack %lu, up %u, " + TRACE(("add_tcp_header(): buffer %p, flags 0x%x, seq %" B_PRIu32 ", ack %" B_PRIu32 ", up %u, " "win %u\n", buffer, segment.flags, segment.sequence, segment.acknowledge, segment.urgent_offset, segment.advertised_window));