From 3dfd8defa9272cf6a5a71ef876d06c8d40bb855a Mon Sep 17 00:00:00 2001 From: jared Date: Fri, 29 Dec 2023 17:08:52 -0500 Subject: [PATCH] Kernel: Properly ack segments in the half-close state We didn't proberly ack incoming packets while in the FinWait2. This fix addresses that. --- Kernel/Net/NetworkTask.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Kernel/Net/NetworkTask.cpp b/Kernel/Net/NetworkTask.cpp index 33abe43f054..91454a76cdf 100644 --- a/Kernel/Net/NetworkTask.cpp +++ b/Kernel/Net/NetworkTask.cpp @@ -614,9 +614,8 @@ void handle_tcp(IPv4Packet const& ipv4_packet, UnixDateTime const& packet_timest socket->set_state(TCPSocket::State::Closed); return; case TCPFlags::ACK: - socket->set_duplicate_acks(0); if (payload_size) { - if (socket->did_receive(ipv4_packet.source(), tcp_packet.source_port(), { &ipv4_packet, sizeof(IPv4Packet) + ipv4_packet.payload_size() }, packet_timestamp)) { + if (socket->did_receive(ipv4_packet.source(), tcp_packet.source_port(), { &ipv4_packet, sizeof(IPv4Packet) + ipv4_packet.payload_size() + 1 }, packet_timestamp)) { socket->set_ack_number(tcp_packet.sequence_number() + payload_size); dbgln_if(TCP_DEBUG, "Got packet with ack_no={}, seq_no={}, payload_size={}, acking it with new ack_no={}, seq_no={}", tcp_packet.ack_number(), tcp_packet.sequence_number(), payload_size, socket->ack_number(), socket->sequence_number());