lwip TCP client & FreeRTOS 打开TCP 的 保活机制 LWIP_TCP_KEEPALIVE==1

来源:互联网 发布:淘宝店铺处罚规则 编辑:程序博客网 时间:2024/05/22 17:21

第一步:在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     3000UL       // 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"
原创粉丝点击