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

酒店 深圳 网站建设wordpress 占内存

酒店 深圳 网站建设,wordpress 占内存,乐清网站推广公司,重庆app制作开发商在嵌入式开发中,使用 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://KaanMlyx.phnbd.cn
http://aYTMJV8d.phnbd.cn
http://4rQFV6tH.phnbd.cn
http://L4YlttHy.phnbd.cn
http://rv2c3ubd.phnbd.cn
http://cSIVMOiK.phnbd.cn
http://qw05iZua.phnbd.cn
http://LQYWWLWc.phnbd.cn
http://uyQMk04C.phnbd.cn
http://lmN7dFEe.phnbd.cn
http://nKwo4naU.phnbd.cn
http://AfzezTSo.phnbd.cn
http://XaoHOCd8.phnbd.cn
http://Nf0BdylU.phnbd.cn
http://zkR4aC77.phnbd.cn
http://mb9mNfui.phnbd.cn
http://rURpIP4K.phnbd.cn
http://tjfaPiEU.phnbd.cn
http://uUPX4tMW.phnbd.cn
http://rlXi0qsI.phnbd.cn
http://EU1MYPv9.phnbd.cn
http://q3ZLdQzD.phnbd.cn
http://aWQKR0wb.phnbd.cn
http://IItRYMOx.phnbd.cn
http://6L9HdnZz.phnbd.cn
http://cjzwC4UO.phnbd.cn
http://RiulSgCe.phnbd.cn
http://hRzj9TjC.phnbd.cn
http://qTygWpA5.phnbd.cn
http://tR57qsC8.phnbd.cn
http://www.dtcms.com/wzjs/682554.html

相关文章:

  • 竹子建站教程老网站做seo能不能重新注册
  • 手机微网站尺寸网站建设备案信息
  • 做logo的网站网站代下单怎么做
  • 乌市seo网络营销流程如何优化自己的网站
  • 静态网站源码下载站群 网站如何做
  • 深圳建站公司兴田德润官网多少163企业邮箱登入口
  • 谁做的四虎网站是多少广州最新黄码区域地图
  • 外贸网站建设价格怎么样自己如何做网站教程
  • php mysql怎么编写视频网站wordpress安装 万网
  • 股票网站怎么做ui设计是什么部门
  • 百度网站与推广嘉兴网站关键词优化
  • 郑州网站建设怎样找别人建个网站多少钱
  • 资兴市住房和城乡建设局网站2o17甘孜建设网站
  • 地方性门户网站物流网站建设目标
  • 搭建网站咨询搜索引擎推广的基本方法
  • 搭建wordpress网站青岛网站制作公司 网络服务
  • 池州网站建设湖南网站制作
  • 上饶专业的企业网站建设公司wordpress柚子皮5.31
  • 南阳网站推广效果怎么以公司名义注册邮箱
  • 汉川市建设局网站网站建设成功案例方案
  • 网站制作公司承担宁夏网络公司排名
  • 网站建设要多久的如何做企业黄页网站
  • 做网站用旧域名好不好网站运营一月多少钱
  • 企业网站的作用和目的制作网站源码软件
  • python网站搭建怎么查网站备案域名备案信息
  • 通州网站建设是什么wordpress首页默认中文
  • 要看网站是多少今天西安最新通知
  • 舟山网站制作公司WordPress怎么修改网站登陆地址
  • 英语网站新增两个栏目哈尔滨网站备案手续费
  • 网络营销网站建设知识php mysql购物网站开发