linux系统中,tcp灌包连接失败是什么原因

linux系统中,tcp灌包连接失败是什么原因,第1张

没有将回应包发送到客户端。linux系统中,tcp灌包连接失败的原因是没有将回应包发送到客户端的35425端口,因此客户端认为建立TCP连接失败,表现出现的现象就是连接断线或网络断开等。

client/server端recv:

①对端close(fd)检测(超时检测):recv 返回0,说明缓存区数据被读完,实测两种情况,对端没有再发数据,对端fd被关闭了。

通过select超时来检测,当超时如2s,我们认为对端连接断开,应关闭本地的fd。

②网线断开/断电关机检测(超时检测):recv 返回-1,errno == EAGAIN,意为“没有可读写数据,缓冲区无数据”。

所以此时需要select超时检测,若超时,要么对端没有再发数据,要么对端的网线断了或者直接断电了。

超过我们判定为对端不在线,关闭本地的fd。

1 确认链路是否连通状态,最好加心跳机制, 如果一定时间没有收到心跳包,或者没有回复心跳

就应认为此链路已经坏掉了,需要关闭,重新连接!

2 至于发送数据,应该检查对应的api的返回值,是否已经成功发送或者接受定长数据!

没有完成应该重新发送或者接受

3 网络数据问题,可以用抓包工具直接抓包看数据,可以看的比较透彻

工具 Linux下用tcpdump,windows用wirekshark


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8405179.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-16
下一篇 2023-04-16

发表评论

登录后才能评论

评论列表(0条)

保存