lwip TCP client & FreeRTOS 打開TCP 的 保活機制 LWIP_TCP_KEEPALIVE==1


參考大神教程: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了 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM