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套接口选项相关资料
|
|