①对端close(fd)检测(超时检测):recv 返回0,说明缓存区数据被读完,实测两种情况,对端没有再发数据,对端fd被关闭了。
通过select超时来检测,当超时如2s,我们认为对端连接断开,应关闭本地的fd。
②网线断开/断电关机检测(超时检测):recv 返回-1,errno == EAGAIN,意为“没有可读写数据,缓冲区无数据”。
所以此时需要select超时检测,若超时,要么对端没有再发数据,要么对端的网线断了或者直接断电了。
超过我们判定为对端不在线,关闭本地的fd。
1 确认链路是否连通状态,最好加心跳机制, 如果一定时间没有收到心跳包,或者没有回复心跳就应认为此链路已经坏掉了,需要关闭,重新连接!
2 至于发送数据,应该检查对应的api的返回值,是否已经成功发送或者接受定长数据!
没有完成应该重新发送或者接受
3 网络数据问题,可以用抓包工具直接抓包看数据,可以看的比较透彻
工具 Linux下用tcpdump,windows用wirekshark
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)