我是否可以接受连接,并在我知道的情况下让它死掉,然后在同一个套接字号上接受另一个连接?
我有一个线程可以进行协议解析和响应创建。我有另一个线程来处理我的所有网络IO和另一个线程来处理新的incomcing连接请求。这使得三个线程总计。在IO线程中使用select,我遇到了故障并且必须搜索死套接字。我担心有一种情况是,accept可能想要接受之前死亡的套接字号上的新连接。
我认为直到我“shutdown()|| close();”才会发生这种情况。“服务器端可能已死的套接字。如果它可能发生,是唯一的解决方案设置互斥锁停止一切,而我解决了什么套接字已经疯狂?
谢谢, Chenz
答案 0 :(得分:2)
套接字描述符在关闭之前不会被重用。
假设我们正在谈论TCP,那么如果远程端关闭其连接的发送端,那么您将获得recv()
返回0字节来告诉您这一点。由于TCP支持half closed连接,您仍然可以将数据发送到连接的远程端(如果您的应用程序级协议是这样做的),或者您可能会认为远程端已关闭其发送端表明你应该这样做。
您使用shutdown()
关闭发送方或您的接收方或连接的两侧。您使用close()
关闭套接字并释放句柄/描述符以供重用。
所以,回答你的问题。不,在您已经拥有的描述符上调用close()
之前,您将无法接受具有相同套接字描述符的另一个连接。
您可以接受新套接字描述符的连接;但这对你来说可能不是问题。