2011-04-26 46 views
0

我正在使用select()语句来处理使用Unix C套接字的多个客户端连接。我想断开闲置的客户端 - 如果在一段时间后我没有收到客户的任何消息。我查看了select()的超时功能,但这是针对整个选择而不是单个客户端的。断开空闲套接字/客户端C

如何终止特定客户端的连接?

回答

3

对于服务器,您通常在循环中调用select。在循环的顶部,您从客户端连接构建您的文件描述符列表。 在这一点上,我会计算您选择等待的最长时间(直到下一个客户端连接应该超时的最短时间)。然后通过该超时呼叫选择。选择结束后,检查每个连接以查看是否收到数据,是否收到新连接或是否已达到超时。处理任何数据,打开/关闭任何连接,然后返回到循环的顶部。

1

当您在连接上进行操作时,请设置一个表示套接字上次发生事件的时间戳。当该套接字的空闲回调发现当前时间与时间戳之间的差异大于超时时间时,触发超时事件并清理套接字。