我正在使用select()
语句来处理使用Unix C套接字的多个客户端连接。我想断开闲置的客户端 - 如果我在一段时间后没有收到客户的任何消息。我查看了select()
的超时功能,但这是针对整个选择而不是单个客户端。
您如何终止特定客户的连接?
答案 0 :(得分:3)
对于服务器,通常在循环中调用select。在循环的顶部,您可以从客户端连接构建文件描述符列表。 此时,我会计算你想要在你的选择中等待的最长时间(最小时间,直到下一个客户端连接应该超时)。然后用该超时调用select。在select结束后,检查每个连接以查看是否收到了数据,是否收到了新连接,或者是否已达到超时。处理任何数据,打开/关闭任何连接,然后返回到循环的顶部。
答案 1 :(得分:1)
当您对连接执行操作时,请设置一个时间戳,该时间戳表示套接字上次发生事件的时间。当该套接字的空闲回调发现当前时间和时间戳之间的差异大于超时时,触发超时事件并清理套接字。