TCP连接时,一方如何知道另一方异常断开连接了?
TCP是全双工的通信 协议,不通过轮询来等待数据,TCP 连接建立起来后,就可以在两个方向传送数据流。当 TCP 的应用进程再没有数据需要发送时,就发关闭命令。 TCP 通过发送控制位 FIN=1 的数据片来关闭本方数据流,但还可以继续接收数据,直到对方关闭那个方向的数据流,连接就关闭。
但如果遭遇对方异常掉电,或意外关闭呢?
目前只能在应用层定时send心跳包来判断,不能发送得太频繁,往往不能及时发现异常断开。之前的sip和adb使用中都遇过。