当服务器的 child 关闭套接字时
when the server's child close socket
在并发服务器上,服务器生成许多 children(假设我在客户端连接时使用多个进程)。因此,如果客户端关闭套接字(close()
函数),它会向服务器发送 FIN
并从服务器接收 ACK
。
最后调用服务器的read()
函数returns0
和exit()
函数。它导致服务器 child 终止并关闭套接字,并将 FIN
发送到其客户端。
在这种情况下,即使服务器的 child 套接字已关闭,服务器如何接收 ACK
?以及服务器如何 re-send FIN
当客户端没有收到 FIN
即使没有连接套接字因为 child 已终止?
内核是否保留终止进程的套接字直到完成最终 four-handshaking 尽管它已关闭?
是的。 close()
通常是异步的。
是的,套接字上的 close()
通常是异步的,套接字可以在应用程序终止后逗留。您可以在 netstat
输出中轻松地看到它们处于适当的状态(例如,TIME_WAIT
或 FIN_WAIT2
)。
在并发服务器上,服务器生成许多 children(假设我在客户端连接时使用多个进程)。因此,如果客户端关闭套接字(close()
函数),它会向服务器发送 FIN
并从服务器接收 ACK
。
最后调用服务器的read()
函数returns0
和exit()
函数。它导致服务器 child 终止并关闭套接字,并将 FIN
发送到其客户端。
在这种情况下,即使服务器的 child 套接字已关闭,服务器如何接收 ACK
?以及服务器如何 re-send FIN
当客户端没有收到 FIN
即使没有连接套接字因为 child 已终止?
内核是否保留终止进程的套接字直到完成最终 four-handshaking 尽管它已关闭?
是的。 close()
通常是异步的。
是的,套接字上的 close()
通常是异步的,套接字可以在应用程序终止后逗留。您可以在 netstat
输出中轻松地看到它们处于适当的状态(例如,TIME_WAIT
或 FIN_WAIT2
)。