当服务器的子关闭套接字

时间:2016-03-23 10:08:25

标签: c sockets unix client-server

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

最后,服务器的read()函数返回0并调用exit()函数。它会导致服务器子进程终止并关闭套接字,并将FIN发送给其客户端。

在这种情况下,即使服务器的子套接字关闭,服务器如何才能收到ACK?以及当客户端没有收到FIN时服务器如何重新发送FIN,即使由于子节点已终止而没有连接的套接字?

内核是否保留终止进程的套接字,直到完成最后的四次握手,尽管它已关闭?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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