当客户端连接到我的服务器端时,如果他们连接到VPN或其他设备,则在它们连接后,服务器端仍然说套接字仍在运行并且仍尝试从中读取数据,我尝试使用另一个线程不断检查我的所有套接字读取并关闭它,如果它返回-1,但仍然不执行任何操作
解决该问题的常用方法是建立一些政策或两种方式。例如。在持续时间Y期间,客户端X发送了np数据或“我还活着”消息,我们关闭了连接。或者,向客户端C发送常规“ ping”消息,并期望在期限Y到期之前做出响应。
但是您正在询问客户端无法与服务器通信的时间。必须使用超时来检测是否缺少消息。
无论哪种方式,X秒钟内没有任何消息(任何形式的消息都表明连接断开。
SO_KEEPALIVE
套接字选项,则OS将定期自动ping通远程端以查看其是否仍然响应,如果没有响应,则关闭该连接。默认超时是几个小时,但是许多操作系统允许您基于每个套接字配置较低的超时。不幸的是,每个人在执行此操作上都不同。例如,Linux使用TCP_KEEPIDLE
套接字选项。 NetBSD(可能还有其他BSD)使用TCP_KEEPALIVE
。依此类推。