分享

lwip 实现断线重连的问题

 心不留意外尘 2016-10-09

http://bbs.csdn.net/topics/390196848

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


wilyas
 回复于: 2014-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套接口选项相关资料

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多