zoukankan      html  css  js  c++  java
  • 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了 

  • 相关阅读:
    Python标准异常topic
    文件打开的模式和文件对象方法
    python中常用的一些字符串
    zabbix3.2.0beta2 监控模版
    人工智能 --test
    Jenkins 2.7.3 LTS 发布
    Python中的socket 模块
    hibenater返回map
    去掉JavaScript Validator
    properties工具类
  • 原文地址:https://www.cnblogs.com/suozhang/p/6743479.html
Copyright © 2011-2022 走看看