失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > lwip 实现断线重连的问题

lwip 实现断线重连的问题

时间:2021-12-04 04:30:23

相关推荐

lwip 实现断线重连的问题

/topics/390196848

各位大侠 , 正在学习lwip 移植到8962板子上,板子是客户端 pc是server端,先打开server端 后给板子上电,可以建立连接,但是问题是如果通信过程中突然断开,比如server端重启,连接就断开了 如何在不让板子重启的情况下 再次建立连接呢?网上说心跳帧,具体能告诉我怎么个机制吗?板子的程序中main函数先建立连接 然后在做别事情,如果采用中断方式,连接超时中断以后怎么才回到main函数? 帮帮忙啊?

楼主这个问题后来怎么解决的啊?

wilyas

回复于: -03-18 09:40:59

所谓的心跳帧,是在协议层使用TCP_KEEPALIVE功能;

经实测,效果很好!

具体步骤如下:(LWIP 1.3.1版本,默认开启socket API接口)

协议层的配置:

lwipopts.h中开启LWIP_TCP_KEEPALIVE功能

同时应用层:

使用setsockopt设置SO_KEEPALIVE、TCP_KEEPIDLE、TCP_KEEPINTVL、TCP_KEEPCNT;

代码: int val = SO_KEEPALIVE;

setsockopt(sock, SOL_SOCKET, SO_KEEPALIVE, &val, 4);

int keepIdle = 6; //in seconds

int keepInterval = 5; //in seconds

int keepCount = 3;

setsockopt(connected, IPPROTO_TCP, TCP_KEEPIDLE, (void *)&keepIdle, sizeof(keepIdle));

setsockopt(connected, IPPROTO_TCP,TCP_KEEPINTVL, (void *)&keepInterval, sizeof(keepInterval));

setsockopt(connected,IPPROTO_TCP, TCP_KEEPCNT, (void *)&keepCount, sizeof(keepCount));

具体TCP_KEEPALIVE的使用可以参考网上关于标准SO_KEEPALIVE套接口选项相关资料

如果觉得《lwip 实现断线重连的问题》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。