我是否可以接受连接并让它在我不知情的情况下死亡,然后在同一个套接字号上接受另一个连接?

时间:2010-03-09 14:39:51

标签: c network-programming sockets

我是否可以接受连接,并在我知道的情况下让它死掉,然后在同一个套接字号上接受另一个连接?

我有一个线程可以进行协议解析和响应创建。我有另一个线程来处理我的所有网络IO和另一个线程来处理新的incomcing连接请求。这使得三个线程总计。在IO线程中使用select,我遇到了故障并且必须搜索死套接字。我担心有一种情况是,accept可能想要接受之前死亡的套接字号上的新连接。

我认为直到我“shutdown()|| close();”才会发生这种情况。“服务器端可能已死的套接字。如果它可能发生,是唯一的解决方案设置互斥锁停止一切,而我解决了什么套接字已经疯狂?

谢谢, Chenz

1 个答案:

答案 0 :(得分:2)

套接字描述符在关闭之前不会被重用。

假设我们正在谈论TCP,那么如果远程端关闭其连接的发送端,那么您将获得recv()返回0字节来告诉您这一点。由于TCP支持half closed连接,您仍然可以将数据发送到连接的远程端(如果您的应用程序级协议是这样做的),或者您可能会认为远程端已关闭其发送端表明你应该这样做。

您使用shutdown()关闭发送方或您的接收方或连接的两侧。您使用close()关闭套接字并释放句柄/描述符以供重用。

所以,回答你的问题。不,在您已经拥有的描述符上调用close()之前,您将无法接受具有相同套接字描述符的另一个连接。

您可以接受新套接字描述符的连接;但这对你来说可能不是问题。