Browse Source

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.
Pierre Delagrave 2 năm trước cách đây
mục cha
commit
55faff80df
1 tập tin đã thay đổi với 1 bổ sung1 xóa
  1. 1 1
      Kernel/Net/TCPSocket.cpp

+ 1 - 1
Kernel/Net/TCPSocket.cpp

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