现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

拔掉网线时Socket的检查方法

2013-05-25 23:10 工业·编程 ⁄ 共 423字 ⁄ 字号 评论 1 条

    最近在做有关于TCP采集程序时,发现在客户端与服务器通过TCP socket进行通信的时候,如果客户端应用程序正常或者异常退出时,服务器都可以在对应的socket通信连接上获得响应(如返回0,或者抛出异常)。但是,如果在客户端的网线被拔掉的情况下,那么默认情况下,服务器端需要很长的时间才会知道客户端的网线断掉。对于许多服务器应用程序来说,这么长的反应时间是不能允许的,在这种情况下通常使用“心跳机制”来解决类似的问题,这是一种可行的办法。
 
由于TCP采集程序只是通过长连接来接收消息,而不能与客户端建立心跳机制,所以唯一可行的办法就是设置超时机制,在非阻塞模式工作的情况下,可以通过空闲计数来判断是否连接超时,在连接空闲情况下TCP采集程序会休眠10ms,并且空闲计数器加1,当收到数据时空闲计数器清零,因此当空闲计数达到3000次的时候,说明socket连接在30秒内没有收到数据,此时认为连接超时,主动的断开连接,释放socket资源。

目前有 1 条留言    访客:0 条, 博主:0 条 ,引用: 1 条

    外部的引用: 1 条

    • 如何检查Socket是否断开 « 求索阁

    给我留言

    留言无头像?