天线|RF射频
直播中

马健

7年用户 222经验值
私信 关注
[问答]

LWIP的keepalive功能TCP长时间不再发送数据就会断开连接

把LWIP中的keepalive功能打开之后,如果协议栈检测到TCP长时间不再发送数据就会把连接断开。如果我在网络正常通信的情况下突然拔掉网线,等到协议栈把TCP连接断开后,再插上网线,但是却不能重新连接之前的TCP,怎么才能让原先的TCP重新连接进行通信呢,谁有好一点的方法??

回帖(10)

王明钊

2020-4-6 07:15:28
这个功能原理就是发送心跳包,如果心跳包没有回复达到你设置的次数,tcp就会发送RST包。
lwip中有代码,你有兴趣可以跟踪看看。
不过默认lwip是没有开启这个功能的,你必须自己修改2个宏。
LCP_ECHOINTERVAL
LCP_MAXECHOFAILS
第一个默认是0,你要在lwipopts.h中定义他的值。第二个是指检查心跳包失败的次数。默认是3次,你自己决定是否要改。
举报

杨平

2020-4-6 07:35:17
重新建立连接就行了。何必纠结原来的链接。
举报

贾飞世

2020-4-6 07:50:08
keepalive功能打开,超过时间后,只是断开TCP链接吗?会不会同时也把连接中相关的pcb资源也释放掉?
举报

李淑英

2020-4-6 08:00:35
pcb资源正常情况下是你要在close时释放的,这种情况你自己处理tcp_err的回调函数释放。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分