搜索
bottom↓
回复: 2

LwIP BUG之TCP连接丢失 (转载)

[复制链接]

出0入0汤圆

发表于 2017-1-8 11:11:37 来自手机 | 显示全部楼层 |阅读模式
本帖最后由 ljt80158015 于 2017-1-8 11:12 编辑

http://blog.sina.com.cn/s/blog_62a85b950102x03f.html


LwIP BUG之TCP连接丢失 (2017-01-04 21:46:34)转载▼

标签: lwip 老衲五木 嵌入式网络那些事 tcp连接异常        分类: LwIP常见问题
LwIP所有版本包括最新的2.0版本具有以下缺陷,当用户使用raw编程并在err或poll回调函数中操作了内核全局tcp_active_pcbs链表(最典型的,比如进行了重连操作),将有可能导致链表异常,严重情况下,链表中的很多tcp_pcb会丢失,从而导致部分连接没有任何反应,出现假死的现象。
具体信息为(以1.4.1为例),在tcp.c文件的tcp_slowtmr函数中,截取如下部分。
请参考下面的蓝色步骤(1)->(2)->(3)->(4)->(5)->(6),该流程路径会引发问题。红色部分为需要添加的代码以修正这个BUG。
代码: 全选
tcp_slowtmr_start:
  prev = NULL;
  pcb = tcp_active_pcbs;
  if (pcb == NULL) {
    LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: no active pcbs\n"));
  }
  while (pcb != NULL) {
    if (pcb->last_timer == tcp_timer_ctr) {//(4)已经处理过的连接不再被处理
         
          prev = pcb;         //需要在源代码中加上这句,否则会引起tcp_pcb丢失
          pcb = pcb->next;
          continue;
    }
    pcb->last_timer = tcp_timer_ctr;
    ....
    if (pcb_remove) { //(1)某种错误后需要移除连接  //(5)第二次循环,如果也出现有需要移除的连接
      if (prev != NULL) {;
        prev->next = pcb->next;
      } else {
        tcp_active_pcbs = pcb->next;//(6)如果不加红色部分,则代码直接进入这里,tcp_active_pcbs被强制改写成pcb->next, 节点丢失!!!!!
      }

      tcp_active_pcbs_changed = 0;
      TCP_EVENT_ERR(err_fn, err_arg, ERR_ABRT); //(2)这里可能进行重连操作
      if (tcp_active_pcbs_changed) {  
        goto tcp_slowtmr_start; //(3)重连后跳回到标号tcp_slowtmr_start
      }
}


该问题发生的场景:至少有两个TCP客户端,并且两个客户端在会在err或者poll回调函数中进行重连,系统里面可以存在其他多个tcp连接(服务器或客户端均可)。如果前述两个客户端启动后,对应的两个服务器均不在线(或者通信过程中poll发生错误),则这两个客户端会不断在err回调函数中进行重连,重连将引发上述(1)~(6)的步骤,从而引起全局链表中其他正常控制块消失,其他连接假死。

出0入0汤圆

发表于 2017-1-9 14:08:29 | 显示全部楼层
前段时间测试 LwIP, 发现周期运行函数, 在连接出现强行断开的时候(比如发现网线掉线后关闭连接), 可能会进入死循环, 原因是对滴答计时处理不理想. 要修改会非常麻烦, 然后对 LwIP 完全失去兴趣.

出0入0汤圆

发表于 2017-1-9 14:37:08 | 显示全部楼层
rt-thread移植的lwip听说很稳定,不知道有没有用过
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-20 00:08

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表