最近的项目中需要判断远处的socket主机是否不在了,然后进行重新连接,由于socket的read是阻塞方法,当远程主机异常断开之后,read将永远阻塞,可以设置sotimeout使得read一段时间之后醒过来再判断socket是否是正常的,但是难点就是怎么判断?网上的方法:
1. 自己写一段测试数据。
不可行,协议是固定的,我自己不能添加任何数据。
2. 使用sendUrgentData
http://ivan4126.blog.163.com/blog/static/20949109220135284278806/
可行。但是注意:
- 刚刚断开的时候sendUrgentData没有任何异常,我超时设置为60s,然后sendUrgentData判断连接是否有效,但是直到5--10次之后也就是至少5分钟之后sendUrgentData才会报错抛出异常,之前几次sendUrgentData不会出错。具体原因未知。