LWIP应用笔记

本文记录了在使用LWIP时遇到的死机问题,详细分析了TCP连接中客户端进入CLOSE_WAIT状态的原因,并提供了解决方案。主要涉及tcp_fasttmr和tcp_tmr函数、回调函数Tcp_Recv中的内存释放、协议栈内核参数配置、网卡驱动配置、系统时钟更新、内存池管理以及TCP连接关闭过程的异常情况处理。通过对TCP连接状态的理解,提出了如何避免客户端进入CLOSE_WAIT状态并造成死循环的方法。
摘要由CSDN通过智能技术生成

死机现象:
设备作为客户端在判断服务器掉线重连过程中会进入lwip中两个定时器相关函数(tcp_fasttmr()和 tcp_tmr())造成死循环

LWIP_TCP修改笔记:
1.tcp_fasttmr()和 tcp_tmr()
2.回调函数Tcp_Recv中的pbuf_free(p)位置;
3.协议栈内核参数配置文件:lwipopts_.h(lwiplib_1.4.1.c -> tcp.c -> lwip/opt.h -> lwipopts_.h)
4.网卡驱动配置文件
5.系统引入sys_check_timeouts处理内核各种定时事件,则需修改系统时钟 sys_now( )函数来返回当前系统时间。
6.协议栈初始化时的g_ui32LocalTimer系统时间变量
7.应用层CreatTaskLwipTcp函数中的Task.period.tTimer时间
8.内存池memp.c文件中memp_malloc()函数与memp_free()函数
详见:https://www.amobbs.com/thread-5554416-1-1.html
9.发现客户端会不断进入CLOSE_WAIT状态(客户端不会出现CLOSE_WAIT状态,只有服务端才会出现),而客户端连接断开的整个过程应该为:
CLOSE — SYN_SENT — ESTABLISHED FIN_WAIT_1 — FIN_WAIT_2 — TIME_WAIT(2MSL) — CLOSE

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值