Lwip使用RAW API进行TCP连接的tcp_err问题

现象:

TCP Server关闭状态下发起连接产生err,并且调用了回调函数tcp_err_fn,错误码是-14(ERR_RST)。在应用程序中调用tcp_close时出错。

c 复制代码
typedef void  (*tcp_err_fn)(void *arg, err_t err);
void tcp_err(struct tcp_pcb *pcb, tcp_err_fn err);

出错原因:

在连接上发生致命错误时会调用tcp_err_fn定义的回调函数。调用的目的是通知应用程序当前连接发生了致命错误,之后tcp的pcb会被自动释放。因此应用程序再次调用tcp_close时会导致访问已经被释放的内存导致出错。

在代码中可以看到使用TCP_EVENT_ERR宏调用回调函数后,会接着移除并释放pcb,此时应用程序只需要在tcp_err_fn回调函数中把pcb的指针置为NULL,防止错误的调用tcp_close函数。

相关推荐
rest102420 分钟前
用io_uring进行io测试
网络
恒拓高科WorkPlus34 分钟前
企业怎样选择IM即时通讯平台?私有化部署还是SaaS更适合?
网络·github
修船大队长1 小时前
配置接受报文每个报文对应一个mailbox配置流程记录
网络·单片机·mcu
一遍再一遍2 小时前
【LTE Attach流程】
网络
星夜夏空993 小时前
网络编程(5)—— Reactor实现(v3)
服务器·网络·php
枫叶丹43 小时前
从一次推理请求出发:模型、显存、网络与服务系统如何共同决定性能
网络·人工智能·chatgpt·开源·agent·codex
恒拓高科WorkPlus3 小时前
制造企业出现生产异常后,如何通过IM快速通知责任人?
网络·制造
熊文豪5 小时前
KingbaseES 数据加密全解:从 SSL 到全密态
网络·网络协议·ssl
91刘仁德5 小时前
Linux网络编程从入门到实战:UDP/TCP协议与socket编程全解析
linux·网络·笔记·tcp/ip·udp