在并发服务器上,服务器会生成许多子节点(假设我在客户端连接时使用多个进程)。因此,如果客户端关闭套接字(close()
函数),它会将FIN
发送到服务器并从服务器接收ACK
。
最后,服务器的read()
函数返回0
并调用exit()
函数。它会导致服务器子进程终止并关闭套接字,并将FIN
发送给其客户端。
在这种情况下,即使服务器的子套接字关闭,服务器如何才能收到ACK
?以及当客户端没有收到FIN
时服务器如何重新发送FIN
,即使由于子节点已终止而没有连接的套接字?
内核是否保留终止进程的套接字,直到完成最后的四次握手,尽管它已关闭?
答案 0 :(得分:1)
是的。 close()
通常是异步的。
答案 1 :(得分:1)
是的,套接字上的close()
通常是异步的,并且套接字可以在应用程序终止后停留。您可以在netstat
输出中以适当的状态轻松查看它们(例如,TIME_WAIT
或FIN_WAIT2
)。