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函数。

相关推荐
同元软控5 小时前
从排队、碰撞到信号波形:基于Sysevents的网络—信号一体化仿真
网络
言乐65 小时前
Python加速器4跨境网络加速器
运维·服务器·开发语言·网络·python
疯狂打码的少年7 小时前
【计算机网络】IPv6基础(特点、表示法、与IPv4对比)
网络·笔记·计算机网络
门思科技7 小时前
LoRaWAN 网络容量估算:一个 SX1302 网关到底能带多少设备
开发语言·网络·php
今天AI了吗11 小时前
什么是 AI Agent?它与直接调用大模型 API 有何区别
java·网络·人工智能·架构·java-ee
小祺先生12 小时前
mt7921 debian系统 如何安装驱动
运维·网络·debian
qq_5085760913 小时前
机器人通讯协议
网络·机器人
captain37613 小时前
网络原理(3)-TCP核心机制连接管理▲▲▲
java·服务器·网络·ide·网络协议·tcp/ip·java-ee
易岳群13 小时前
搞清 Socket、TCP、MQTT 的通信关系:从底层协议到物联网实战
网络协议·tcp/ip·socket·通信协议关系
小程序设计13 小时前
基于SNMP+NetFlow的企业内网链路质量监测系统设计与实现
网络