检查tcp 有没有断开 linux
发布网友
发布时间:2022-04-21 02:11
我来回答
共1个回答
热心网友
时间:2022-06-17 06:53
client/server端recv:
①对端close(fd)检测(超时检测):recv 返回0,说明缓存区数据被读完,实测两种情况,对端没有再发数据,对端fd被关闭了。
通过select超时来检测,当超时如2s,我们认为对端连接断开,应关闭本地的fd。
②网线断开/断电关机检测(超时检测):recv 返回-1,errno == EAGAIN,意为“没有可读写数据,缓冲区无数据”。
所以此时需要select超时检测,若超时,要么对端没有再发数据,要么对端的网线断了或者直接断电了。
超过我们判定为对端不在线,关闭本地的fd。