死机现象:
设备作为客户端在判断服务器掉线重连过程中会进入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