参考大神教程:http://blog.sina.com.cn/s/blog_62a85b950101aw8x.html 老衲五木
:http://blog.sina.com.cn/s/blog_62a85b950102vrr4.html 老衲五木
:http://blog.csdn.net/zhzht19861011/article/details/46564699 朱工
第一步:在opt.h中 LWIP_TCP_KEEPALIVE 置1
1 /** 2 * LWIP_TCP_KEEPALIVE==1: Enable TCP_KEEPIDLE, TCP_KEEPINTVL and TCP_KEEPCNT 3 * options processing. Note that TCP_KEEPIDLE and TCP_KEEPINTVL have to be set 4 * in seconds. (does not require sockets.c, and will affect tcp.c) 5 */ 6 #if !defined LWIP_TCP_KEEPALIVE || defined __DOXYGEN__ 7 #define LWIP_TCP_KEEPALIVE 1 8 #endif
第二步:在lwipopts.h文件中添加 四个宏定义
1 #define TCP_KEEPIDLE_DEFAULT 5000UL // 5秒内连接双方都无数据,则发起保活探测(该值默认为2小时) 2 #define TCP_KEEPINTVL_DEFAULT 1000UL // 每1秒发送一次保活探测 3 //保活机制启动后,一共发送5次保活探测包,如果这5个包对方均无回应,则表示连接异常,内核关闭连接,并发送err回调到用户程序 4 #define TCP_KEEPCNT_DEFAULT 5UL 5 #define TCP_MAXIDLE TCP_KEEPCNT_DEFAULT * TCP_KEEPINTVL_DEFAULT
第三步:因为 我 做的 是 TCP client ,协议栈不默认打开保活机制,因此需要打开。这里一定 要在 conn = netconn_new(NETCONN_TCP); 这句代码之后进行 设置否则 造成内存错误啊 。。
1 /* Create a new connection identifier. */ 2 conn = netconn_new(NETCONN_TCP); 3 4 if (conn!=NULL) 5 { 6 7 //打开TCP 的保活功能 (客户端不默认打开) 8 conn->pcb.tcp->so_options |= SOF_KEEPALIVE;//SOF_KEEPALIVE=0x08U
第四步:编译发现不能通过,需要包含两个头文件
1 #include "lwip/tcp.h" 2 #include "lwip/ip.h"