【转】Lwip 断连,连接几次后不通及偶尔不通的问题.

2023-11-05

https://blog.csdn.net/hecong_kit/article/details/24415693

新加这个函数,并在tcp_in函数里调用一下.出现不通的原因是在网络状态不流畅的情况下,连续连接N次后,LWIP默认不在连接,新建一个变量

//自己做一个函数

struct tcp_pcb *tcp_find_distant(void)

{
#if LWIP_AUTO_FREE_ACTIVE_PCB
    struct tcp_pcb *pcb  = NULL;
    struct tcp_pcb *last_pcb  = NULL;
    unsigned long last_tick = get_sys_tick();
    int pcb_num = 0;  //当前一共有几个 配置宏 MEMP_NUM_TCP_PCB


    for(pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next)
    {
        pcb_num++;
    }
    if(pcb_num>=MEMP_NUM_TCP_PCB)
    {
        for(pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next)
        {
            if(last_tick>pcb->last_tick)
            {
                last_tick = pcb->last_tick;
                last_pcb = pcb;
            }
        }
    }
    return last_pcb;
#else
    return NULL;
#endif

}

 

void
tcp_input(struct pbuf *p, struct netif *inp)
{

......

 for(lpcb = tcp_listen_pcbs.listen_pcbs; lpcb != NULL; lpcb = lpcb->next) {
      if ((ip_addr_isany(&(lpcb->local_ip)) ||
        ip_addr_cmp(&(lpcb->local_ip), &(iphdr->dest))) &&
        lpcb->local_port == tcphdr->dest) {
        /* Move this PCB to the front of the list so that subsequent
           lookups will be faster (we exploit locality in TCP segment
           arrivals). */
        if (prev != NULL) {
          ((struct tcp_pcb_listen *)prev)->next = lpcb->next;
                /* our successor is the remainder of the listening list */
          lpcb->next = tcp_listen_pcbs.listen_pcbs;
                /* put this listening pcb at the head of the listening list */
          tcp_listen_pcbs.listen_pcbs = lpcb;
        }
      
        LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_input: packed for LISTENing connection.\n"));

        //新加的代码
        //无法申请到内存块,说明当前已连接的PCB已达到上限,释放最近的active中的PCB块
        if(tcp_listen_input(lpcb)==ERR_MEM)
        {
            struct tcp_pcb *destroy_pcb = tcp_find_distant();


            if(destroy_pcb!=NULL)
            {
                tcp_abandon(destroy_pcb, 1);
                //tcp_close(destroy_pcb);
                goto LBL_RESTART;
            }
        }
        pbuf_free(p);
        return;
      }
      prev = (struct tcp_pcb *)lpcb;
    }
  }

 

LwIP BUG之TCP连接丢失

注:本文转自老衲五木的博客! LwIP所有版本包括最新的2.0版本具有以下缺陷,当用户使用raw编程并在err或poll回调函数中操作了内核全局tcp_active_pcbs链表(最典型的,比如进行了...

  • lj570681983

    尒槑: 太感谢了,成功的解决了我的问题,困扰我好久了(05-24 00:06#3楼)

  • hecong129

    辧聪: 时间太久远了,很久不做这块,应该是进到连接网络的位置(11-08 11:13#2楼)

  • dndxck

    dndxck: goto LBL_RESTART,这句的LBL_RESTART设置在哪(11-03 13:56#1楼)举报回复

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【转】Lwip 断连,连接几次后不通及偶尔不通的问题. 的相关文章

  • SpringBoot 项目打成 .exe 程序

    https mp weixin qq com s XmNYqyZeY 1gSBxpAX4TRQ
  • 抖音设计系统Semi Design:解构、原理与实现

    摘要 本文将深入探讨抖音设计系统Semi Design 阐述其定义 分析其原理 并通过详细代码展示其实现方法 本文旨在为设计师 开发人员和相关领域的研究者提供有关Semi Design的深入理解和实用指南 引言 抖音 作为一款全球流行的短视
  • Vue+style 动态样式绑定(收藏图标)

    主要代码 0 未收藏 1 已收藏
  • 函数隐藏和函数覆盖

    函数隐藏和函数覆盖 1 函数隐藏 派生类中函数具有与基类同名的函数 参数列表不一定相同 从而派生类中隐藏了基类的同名函数 2 函数覆盖 定义 派生类中函数将基类中的函数覆盖的情况称为函数覆盖 条件 1 基类是虚函数 2 发生覆盖的两个函数分
  • static与const的区别

    一 static主要有三个作用 1 修饰局部变量 成为静态局部变量 2 修饰全局变量 成为静态全局变量 3 修饰函数 成为静态函数 1 修饰局部变量 成为静态局部变量 没有加static的情况 如果加了static会有什么变化呢 栈区 存放
  • iOS完整学习路线图

    今晚特地花时间整理出了iOS的完整学习路线图 希望对大家有帮助 FROM http blog csdn net q199109106q article details 8596506
  • stm32通过I2C接口实现温湿度(AHT20)的采集

    stm32通过I2C接口实现温湿度 AHT20 的采集 一 I2C总线协议详解 一 I2C总线物理拓扑结构 二 I2C总线协议 三 硬件I2C和模拟I2C 1 硬件I2C 2 模拟I2C 3 区别 二 实现AHT20采集程序 一 了解AHT
  • 教程四:使用物联网平台控制硬件端

    物美智能 系列文章目录 一款强大的物联网管理平台介绍 物美智能 教程一 阿里云使用docker快速部署服务端 教程二 本地配置服务端开发环境 教程三 硬件端 Arduino和ESP8266开发板入门 教程四 使用物联网平台控制硬件端 教程五
  • 【转】this 的使用方法 —— javascript中的this讲解!

    从自己刚刚开始学习javascript到现在已经很久了 今天得益于新酱的细心讲解 总算是把this这个 雾中花 看清晰了 在此首先感谢新酱的讲解 下面将this的一些基本使用和大家分享一下 查看this指向的一句话法则 永远指向其所在函数的
  • word中公式后面标号右对齐

    版权声明 本文为博主原创文章 转载请标明链接 https blog csdn net zaishuiyifangxym article details 81709319
  • CentOS7服务器安装GPU显卡驱动和CUDA简单方法

    一键安装 通过下载官网runfile程序 自带驱动 参考 Centos7 4安装CUDA9 1 GPU驱动安装 先安装驱动 再安装cuda 参考 CentOS安装nvidia显卡驱动的正确方法 添加ELRpo源 1 导入公钥 rpm imp
  • 实战使用pano2vr生成html5全景页面

    随着现代视觉技术的进步以及对空间展示的迫切需求 很多的无人机可以拍出360度甚至720度全景照片 怎样将全景地图以html5的形式展示出来 文章将详细讲解如何使用pano2vr exe制作全景页面 1 准备pano2vr exe 软件 以w
  • adb 连接某个wifi_一加7 Pro全局强制开启90Hz刷新率的办法(附ADB文件下载)

    要说当前市场上值得买的安卓旗舰有哪几台 上个月刚上市的一加7Pro绝对算一个 一加7Pro最大的卖点就是那块从三星特别定制的6 7英寸QHD分辨率90Hz刷新率 自诩为除三星S10外市场上第二好的AMOLED屏幕 当每一位用过这台能完美呈现
  • JAVA程序入门--数据类型掌握练习《输入个人信息、计算圆的面积、变量交换》

    目录 前言 一 引用 1 Scanner类 1 1 Scanner基本语法 1 2 简单使用 1 3 执行 查看效果 二 练习1 输入个人信息 1 练习内容 2 逻辑梳理 3 整理代码 4 执行结果 三 练习2 计算圆形的面积 1 练习内容
  • git push 提交失败

    提交错误如下 git push origin Enumerating objects 1107 done Counting objects 100 1107 1107 done Delta compression using up to 1
  • 图片转二进制——各种方法汇总

    使用Base64转换图片 利用Base64实现二进制和图片之间的转换 具体代码如下 import java awt image BufferedImage import java io ByteArrayInputStream import
  • win10开始菜单打不开,找不到(没有)本地安全策略

    方法一 看你C盘windows目录下的system32目录下 这两个文件gpedit msc和secpol msc还在不在 不在了就从别的电脑上拷过来 然后点 开始 运行 输入gpedit msc 点确定 如果没有执行 那么就直接去wind
  • linux查看已删除空间却没有释放的进程

    背景 rm删除了文件或者文件夹 df查看时发现没有释放磁盘空间 执行lsof n grep deleted这个命令 root localhost lsof n grep deleted 发现有几个删除了但是没有释放空间 root local
  • Sequence Modeling: Recurrent and Recursive Nets(1)

    CONTENTS Recurrent neural networks or RNNs Rumelhart et al 1986a are a family of neural networks for processing sequenti

随机推荐

  • keil debug如何在watch直接修改变量值_ST福利:如何使用STM32F103C8T6的后64KB flash

    在STM32F103系列芯片中 C8T6 和CBT6均为LQFP48封装 而且差异仅为flash大小区别 C8T6为64KB CBT6为128KB 然而 虽然C8T6的datasheet中标称为64KB 实际上C8T6和CBT6由同一片di
  • Linux Watchdog 机制

    前言 Watchdog 是 Linux 系统一个很重要的机制 其目的是监测系统运行的情况 一旦出现锁死 死机的情况 能及时重启机器 取决于设置策略 并收集crash dump watchdog 顾名思义 看门狗 这就说明 有一个被watch
  • Ubuntu16.04安装jdk1.8

    Ubuntu16 04安装jdk记录 在官网上下载jdk版本 这个步骤就不详细说明 图形化的 很简单 移到 opt 目录下 个人习惯 sudo mv sudo mv jdk 8u151 linux x64 tar gz opt 解压缩到 o
  • 基于antd Tree实现可编辑菜单树,支持节点新增、删除

    基于antd3 Tree实现可编辑菜单树 支持节点新增 编辑 删除 基于antd Tree 实现了可编辑菜单树 支持以下功能 树节点 新增 编辑 删除 提示 以下代码 可参考 一 效果 二 完整代码 1 引入库 代码如下 示例 import
  • camera isp应用

    ISP应用及市场调研报告 1 调研目标及方法 1 1 调研目标 手机摄像头模组用ISP功能模块的市场走向及研发方向 为能够正确认识手机摄像模组行业提供技术及市场依据 2 ISP在模组上的应用原理 图一 手机摄像模组后端处理IC功能划分图 2
  • 锁相环工作原理

    锁相环 Phase Locked Loop 相位 锁 环路 简称 PLL 基本构成 f1 是输入频率 f2是输出频率 并且反馈给鉴相器 压控振荡器 压控振荡器的全称是 Voltage Controlled Oscillator 电压 控制
  • Unix时间戳和北京时间的相互转换(C语言实现 )

    一 问题背景 最近物联网项目中需要上传包含时间戳的设备数据到服务器平台 原本想把 年 月 日 时 分 秒 分别用一个 uint8 t 的数据类型去存储 即占用6个字节 但是在平台配置协议时 只有一种叫 Unix时间戳 的数据类型 Unix时
  • Restful API思路

    1 通过服务器重写规则 将所有请求走一个入口方法 例如index php的run 方法 2 通过 SERVER 找到请求方法 请求路径 请求参数 进行初始化参数 3 根据请求路径 走不同model处理 根据请求方法不同 走不同的处理方法 4
  • SystemVerilog 验证-测试平台编写指南学习笔记(3):连接设计和测试平台

    文章目录 1 为什么需要更高层次的方法连接 Testbench 与 DUT 2 SystemVerilog 接口 2 1 什么是接口 2 2 接口怎么连接 2 3 接口的优缺点 3 SystemVerilog 控制通信中时序问题地结构 3
  • 教你快速搭建个人网站

    一 搭建环境 云主机 华为云 操作系统 centos 7 x 源码 GitHub wyt1215819315 autoplan 这是一个自动化的托管系统 目前支持网易云 bilibili 米游社原神签到 测试地址https auto old
  • vue项目在ie11 浏览器运行出现错误解决方法

    一 基础配置 vue cli 版本 5 0 1 配置 browserslistrc 文件 gt 1 last 2 versions not dead ie gt 10 2 配置vue config js 配置 transpileDepend
  • C++堆栈详解

    前言 我们经常听见一个概念 堆 heap 和栈 stack 其实在数据结构中也有同样的这两个概念 但是这和内存的堆栈是不一样的东西哦 本文也会说明他们之间的区别的 另外 本文的只是是以C C 为背景来说明 不同的语言在内存管理上面会有区别
  • java实现只能有一个相同用户登录的功能

    需求 使用相同用户名登录系统 确保同名用户登录顶掉之前用户登录或者返回登录的功能 实现效果图 java实现 首先 1 web xml中配置监听器
  • CMD 查杀端口详细

    1 netstat aon findstr pid 2 taskkill pid id f 杀死端口 注 pid 后面的pid 事 查询的进程id
  • 多元回归预测

    文章目录 效果一览 文章概述 部分源码 参考资料 效果一览 文章概述 多元回归预测 Matlab贝叶斯算法 bayes 优化随机森林的数据回归预测 bayes RF回归预测 多变量输入模型 评价指标包括 MAE RMSE和R2等 代码质量极
  • 工程(二)——DeeplabV3+语义分割训练自制数据集

    目录 1 配置环境 1 1 利用conda新建一个环境并激活 1 2 安装pytorch 1 3 更新bashrc环境 2 安装DeeplabV3 2 1 克隆代码 2 2 下载数据集和预训练模型 3 测试算法 4 制作VOC数据集 4 1
  • windows查看进程,以及是哪个功能启用当前的服务的

    windows查看进程 理论 实战 理论 查看进程启动的详细信息 1 tasklist v 2 wmic process get caption commandline value 可以获取进程启动的命令行参数信息等 获取具体某个信息 1
  • 将经纬度坐标在ArcGIS软件中生成系列矢量数据

    目录 环境介绍 操作内容 操作步骤 1 将经纬度坐标值编辑在excel中 注意x y对应的分别是经度和纬度 2 打开ArcMap软件 加载 xls数据 3 需要选择地理坐标系 4 点矢量数据生成 5 线矢量数据生成 6 面矢量数据生成 环境
  • 【HBZ分享】Mysql的binlog格式分类(STATEMENT, ROW, MIXED)

    STATEMENT格式 全名Statement Based Replication SBR 会记录每一条SQL语句 即SQL怎么写的 他就会怎么记录 无论更改多少行 该格式都不在乎 他只会记录SQL 优点 由于只记录sql 不会记录每一行变
  • 【转】Lwip 断连,连接几次后不通及偶尔不通的问题.

    https blog csdn net hecong kit article details 24415693 新加这个函数 并在tcp in函数里调用一下 出现不通的原因是在网络状态不流畅的情况下 连续连接N次后 LWIP默认不在连接 新