Kernet/Net: Close a TCP connection using FIN|ACK instead of just FIN

When initiating a connection termination, the FIN should be sent with
a ACK from the last received segment even if that ACK already been sent.
This commit is contained in:
Pierre Delagrave 2023-06-28 18:40:44 -04:00 committed by Andreas Kling
parent d33b99dd24
commit 55faff80df
Notes: sideshowbarker 2024-07-17 11:33:34 +09:00

View file

@ -534,7 +534,7 @@ void TCPSocket::shut_down_for_writing()
{
if (state() == State::Established) {
dbgln_if(TCP_SOCKET_DEBUG, " Sending FIN from Established and moving into FinWait1");
(void)send_tcp_packet(TCPFlags::FIN);
(void)send_tcp_packet(TCPFlags::FIN | TCPFlags::ACK);
set_state(State::FinWait1);
} else {
dbgln(" Shutting down TCPSocket for writing but not moving to FinWait1 since state is {}", to_string(state()));