參考大神教程: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
/** * LWIP_TCP_KEEPALIVE==1: Enable TCP_KEEPIDLE, TCP_KEEPINTVL and TCP_KEEPCNT * options processing. Note that TCP_KEEPIDLE and TCP_KEEPINTVL have to be set * in seconds. (does not require sockets.c, and will affect tcp.c) */ #if !defined LWIP_TCP_KEEPALIVE || defined __DOXYGEN__ #define LWIP_TCP_KEEPALIVE 1 #endif
第二步:在lwipopts.h文件中添加 四個宏定義
#define TCP_KEEPIDLE_DEFAULT 5000UL // 5秒內連接雙方都無數據,則發起保活探測(該值默認為2小時) #define TCP_KEEPINTVL_DEFAULT 1000UL // 每1秒發送一次保活探測 //保活機制啟動后,一共發送5次保活探測包,如果這5個包對方均無回應,則表示連接異常,內核關閉連接,並發送err回調到用戶程序 #define TCP_KEEPCNT_DEFAULT 5UL #define TCP_MAXIDLE TCP_KEEPCNT_DEFAULT * TCP_KEEPINTVL_DEFAULT
第三步:因為 我 做的 是 TCP client ,協議棧不默認打開保活機制,因此需要打開。
這里一定 要在 conn = netconn_new(NETCONN_TCP); 這句代碼之后進行 設置否則 造成內存錯誤啊 。。
/* Create a new connection identifier. */ conn = netconn_new(NETCONN_TCP); if (conn!=NULL) { //打開TCP 的保活功能 (客戶端不默認打開) conn->pcb.tcp->so_options |= SOF_KEEPALIVE;//SOF_KEEPALIVE=0x08U
第四步:編譯發現不能通過,需要包含兩個頭文件
#include "lwip/tcp.h" #include "lwip/ip.h"
OK了
