前言
最近在学习zynq中的lwip协议族,找不到很好的记笔记的地方,所以就用csdn记录一下自己的学习过程。现在对lwip不熟悉,只是把官方的lwip echo server例程跑了一下,能跑通就一点点的照着学了,笔记都是根据自己的理解写的,而且部分内容可能也只针对lwip echo server例程有效,笔记可以供有缘人参考,但不敢保证全对,有不对的地方也期待有高人指点一二。
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.youkuaiyun.com/weixin_40356705/article/details/136824649
一、概述
- 原型
void tcp_arg(struct tcp_pcb *pcb, void *arg)
- 参数
struct tcp_pcb *pcb : 表示一个指向tcp_pcb结构的指针(代表TCP连接控制块)
void *arg :一个void型指针,代表要传递给回调函数的参数 - 作用
tcp_arg函数用于设置TCP连接的回调函数参数。这样,当与该连接相关的回调函数(如接收回调或错误回调)被调用时,它们可以访问这个参数。这在实现需要跨多个回调函数共享状态或数据的程序时非常有用。
二、函数体
void tcp_arg(struct tcp_pcb *pcb, void *arg)
{
LWIP_ASSERT_CORE_LOCKED();
//调用LWIP_ASSERT_CORE_LOCKED宏。这通常用于确保核心(或关键部分)在调用这个函数时是锁定的,以防止并发访问导致的问题。
/* This function is allowed to be called for both listen pcbs and connection pcbs. */
//注释:这个函数既可用于监听PCB(即尚未接受连接的PCB),也可用于已建立的连接PCB。
if (pcb != NULL) {
//检查pcb参数是否为NULL。确保在尝试访问其成员之前,它是一个有效的指针。
pcb->callback_arg = arg;
//如果pcb不是NULL,则将其callback_arg成员设置为传入的arg参数。这样,当回调函数被调用时,它们可以访问这个参数。
}
}
三、调用关系
被accept_callback调用,没有调用其他函数