我目前正在使用BSD套接字API。我想使用select()函数来监视(a)监听器套接字,该监听器套接字使用accept()等待新连接,而(b)则是通过accept()或connect()创建的所有客户端套接字。我希望监听器套接字没有任何超时,并且我希望每个客户端套接字都具有120秒的超时。

是否可以使用select()函数?它仅接受所有套接字的单个超时值,因此我的假设是“否”。如果是这样,我注定要制造一个服务器,其中每个套接字在其自己的线程中以阻塞模式运行吗?

最佳答案

由于select()函数的逻辑,您应该将它传递给您的超时最小。如果达到此最小超时时间,则相应的套接字超时,您应该处理这种情况。换句话说,具有更大超时时间的套接字永远不会超时,因为它们只是没有机会:时间是从最后一个select()调用而不是第一个调用开始计算的。

去找线程;您无法使用一个select()做到这一点。

关于c++ - 如何为select()监视的每个套接字设置不同的超时时间?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1430935/

10-16 07:16