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

相关推荐
集成显卡1 小时前
网络安全 | 从 0 到 1 了解 WAF:Web 应用防火墙到底是什么?
网络·安全·web安全
Jewel Q1 小时前
TCP为什么采用三次握手而不是二次握手
服务器·网络·tcp/ip
lihongli0002 小时前
消息系统技术文档
网络·unity·游戏引擎
Moso_Rx3 小时前
HTTP基本结构
网络·网络协议·http
千码君20163 小时前
计算机网络:网络号和网络地址的区别
网络·计算机网络·子网掩码·网络地址·网络号·主机号
wanhengidc4 小时前
进一步分析云手机的优势有哪些?
网络·安全·智能手机
fulangxisikexi4 小时前
ospf综合实验
网络
_Kayo_5 小时前
VUE2 学习笔记17 路由
网络·笔记·学习
_Chipen6 小时前
DPDK中的TCP头部处理
服务器·网络·tcp/ip
Menior_6 小时前
【Linux】进程信号
linux·运维·网络