当前位置: 首页 > wzjs >正文

网站设计 手写济南特大最新消息

网站设计 手写,济南特大最新消息,宁波seo是什么意思,怎么做淘宝客采集网站在嵌入式开发中,使用 lwIP 实现 WebSocket 客户端时,偶尔会遇到反复连接导致 TCP PCB(Protocol Control Block)泄漏,最终连接数达到上限(如 4)后无法再建立新连接的问题。本文将结合实际案例&am…

        在嵌入式开发中,使用 lwIP 实现 WebSocket 客户端时,偶尔会遇到反复连接导致 TCP PCB(Protocol Control Block)泄漏,最终连接数达到上限(如 4)后无法再建立新连接的问题。本文将结合实际案例,分析问题原因并给出彻底解决方案。

问题现象

        设备端 WebSocket 客户端反复连接服务器,运行一段时间后,发现无法再建立新连接。通过调试 lwIP,发现 TCP PCB 数量不断增加,达到最大值后,后续连接全部失败。

#define MEMP_NUM_TCP_PCB                4

原因分析

        lwIP 的 TCP PCB 用于管理每个 TCP 连接的状态。正常情况下,连接关闭后 PCB 会被释放。但在实际代码中,WebSocket 客户端反复连接时,旧的 PCB 没有被及时释放,导致 PCB 泄漏。主要原因有:

  • 连接关闭时未主动调用 altcp_close 或 altcp_abort 彻底释放 PCB。
  • 新连接初始化前未检查并释放旧 PCB。

解决方案

         1.关闭连接时彻底释放 PCB,在 wsock_close() 函数中,主动调用 altcp_close,如失败则调用 altcp_abort

 if (pws->pcb) {
altcp_arg(pws->pcb, NULL);
altcp_recv(pws->pcb, NULL);
altcp_err(pws->pcb, NULL);
altcp_poll(pws->pcb, NULL, 0);
altcp_sent(pws->pcb, NULL);
if (altcp_close(pws->pcb) != ERR_OK) {
altcp_abort(pws->pcb);
close_err = ERR_ABRT;
}
pws->pcb = NULL;
}

        2. 修改lwipopts.h的LWIP_SOCKET宏定义:

 #define LWIP_SOCKET                     0

总结

        问题的根本原因是同事一开始没有改LWIP_SOCKET这个宏,默认为1,出现连接失败会自动调用wsock_close()导致出现HardFault_handler,然后他把这段释放处理屏蔽了,能正常使用,但又导致TCP PCB未能正确释放。

#define LWIP_SOCKET                     1

 

    if(pws->pcb)

    {

        altcp_arg(pws->pcb, NULL);

        altcp_recv(pws->pcb, NULL);

        altcp_err(pws->pcb, NULL);

        altcp_poll(pws->pcb, NULL, 0);

        altcp_sent(pws->pcb, NULL);

        // 主动关闭连接,彻底释放PCB资源

        // if(altcp_close(pws->pcb) != ERR_OK)

        // {

        //     altcp_abort(pws->pcb);

        //     close_err = ERR_ABRT;

        // }

        pws->pcb = NULL;

    }

        因为 lwIP WebSocket 客户端是基于 lwIP 的 TCP/ALTCP 原生 API 和 PCB 机制实现的,而不是基于 Socket API,LWIP_SOCKET 1 使能了 Socket API,导致 lwIP 内部在连接失败时自动调用 wsock_close(),而如果 PCB 或相关资源未正确初始化或已被释放,wsock_close() 内部访问空指针或非法内存就会触发 HardFault。

        正确的做法就是只需要修改lwipopts.h的LWIP_SOCKET宏定义为0,websocket_client.c源文件不需要修改:

#define LWIP_SOCKET                     0

 

http://www.dtcms.com/wzjs/319831.html

相关文章:

  • 网站建设费用如何入账电商网站大全
  • 台州网站搜索引擎优化广州信息流推广公司排名
  • 个人域名可以做网站吗让百度收录自己的网站
  • 网站后门清除百度推广开户价格
  • 嘉兴官网网站搜索引擎优化方法
  • 怎么用html做网站什么是百度竞价排名
  • 卖一手房做哪个网站好中国网络推广网站排名
  • 简单学校网站模板网站推广如何引流
  • winxp下做网站自制网站
  • 做网站建设公司排名阿里云免费建站
  • 三七批发可做网站名吗网络营销专业代码
  • 唐山seo网络推广深圳网站关键词优化推广
  • 长沙做网站 必看 磐石网络济南搜索引擎优化网站
  • 动漫网页设计作品seo搜索引擎
  • 网站制作公司网站建设公众号软文是什么意思
  • 如何建设网站教程视屏网页设计模板网站免费
  • 永嘉网站制作系统成都网站推广经理
  • 北京效果好的网站推广网站关键词排名批量查询
  • 微信公众号做头图的网站爱站工具包的主要功能
  • 网站基本架构设计的主要步骤网络营销模式
  • 云南网站制作价格网站seo哪家好
  • 做网站比较专业的公司seo网站推广专员
  • 建站之星网站建设系统怎么在线上推广自己的产品
  • 徐州英文网站优化制作一个网站的费用是多少
  • 如何在电脑上打开自己做的网站自己有网站怎么推广
  • 贵州省住房和城乡建设厅查询网站首页东莞seo计费
  • 网站建设公司排名前十成都纯手工seo
  • 网站建设 源代码归属网站关键词排名优化电话
  • 口碑好的企业网站建设平台推广引流怎么做
  • 怎么找平台推广怎么寻找网站关键词并优化