当服务器的 child 关闭套接字时

when the server's child close socket

在并发服务器上,服务器生成许多 children(假设我在客户端连接时使用多个进程)。因此,如果客户端关闭套接字(close() 函数),它会向服务器发送 FIN 并从服务器接收 ACK

最后调用服务器的read()函数returns0exit()函数。它导致服务器 child 终止并关闭套接字,并将 FIN 发送到其客户端。

在这种情况下,即使服务器的 child 套接字已关闭,服务器如何接收 ACK?以及服务器如何 re-send FIN 当客户端没有收到 FIN 即使没有连接套接字因为 child 已终止?

内核是否保留终止进程的套接字直到完成最终 four-handshaking 尽管它已关闭?

是的。 close() 通常是异步的。

是的,套接字上的 close() 通常是异步的,套接字可以在应用程序终止后逗留。您可以在 netstat 输出中轻松地看到它们处于适当的状态(例如,TIME_WAITFIN_WAIT2)。