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

相关推荐
网络工程小王17 小时前
【企业中小型网络架构设计】
网络
七夜zippoe17 小时前
OpenClaw Skills 高级开发指南
服务器·网络·人工智能·skills·openclaw
想唱rap17 小时前
应用层协议与序列化
linux·运维·服务器·网络·数据结构·c++·算法
KnowSafe17 小时前
Certificate Lifecycle Management:企业证书管理的终极解决方案
网络
江南风月17 小时前
WGCLOUD如果使用SQL Server数据库推荐哪个版本
运维·网络·zabbix·运维开发·prometheus
GottdesKrieges18 小时前
OceanBase备份常见问题
linux·网络·oceanbase
Empty-Filled18 小时前
Claude Gateway 排查教程
网络·数据库·人工智能
byoass18 小时前
企业云盘高可用架构:主备切换、负载均衡与健康检查实战
运维·网络·安全·架构·云计算·负载均衡
luoqice18 小时前
RTMP视频流的帧格式分析
网络·ffmpeg
_Evan_Yao18 小时前
从 IP 路由到 Agent 路由:最长前缀匹配如何帮你分发任务?
java·网络·后端·网络协议·tcp/ip