2010-03-09 39 views
1

我可以接受一个连接,并让它随着我的知道而死亡,然后在同一个套接字号上接受另一个连接?我可以接受一个连接,并让它随着我的知道而死亡,然后接受同一套接字号上的antoher连接吗?

我有一个线程来做协议分析和响应创建。我有另一个线程来处理我所有的网络IO和一个线程来处理新的不匹配的连接请求。这使得总共三个线程。在IO线程中使用select,我会失败,并且必须搜索死锁套接字。恐怕有接受可能希望接受以前死亡的套接字号码上的新连接的情况。我认为这不可能发生,直到我“shutdown()|| close();”可能在服务器端死掉的套接字。如果它可能发生,是唯一的解决方案来设置互斥体来停止一切,而我理清哪些套接字已经疯狂了?

感谢, Chenz

回答

2

套接字描述符不会得到重用,直到你关闭它。

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

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

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

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

相关问题