TCP控制块回调函数困惑?

2019-03-24 12:39发布

TCP控制块中定义了以下几种回调函数:
err_t (* sent)(void *arg, struct tcp_pcb *pcb, u16_t space);
err_t (* recv)(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err);
err_t (* connected)(void *arg, struct tcp_pcb *pcb, err_t err);
err_t (* poll)(void *arg, struct tcp_pcb *pcb);
err_t (* accept)(void *arg, struct tcp_pcb *newpcb, err_t err)  
以 err_t (* accept)(void *arg, struct tcp_pcb *newpcb, err_t err)为例,当处于监听状态的控制块监听到连接时,该函数会被调用,在程序中,我们会定义这样一个回调函数,比如
err_t TCP_Server_Accept(void *arg,struct tcp_pcb *pcb,err_t err)
{    tcp_recv(pcb,usr_recv);//设置下位机接收到数据后的回调函数
   return ERR_OK;
}
于是,我们还会编写下位机接收到数据后的回调函数,如下
err_t usr_recv(void *arg,struct tcp_pcb *pcb,struct pbuf *p,err_t err)
{......}  
我有两个问题:
  • TCP_Server_Accept和 usr_recv两个函数中的形参struct tcp_pcb *pcb是同一个pcb吗?这个pcb如何产生的?我的理解是这两个就是同一个pcb,都是服务器端用来通信的那个pcb,当服务器和客户端通信建立时,这个pcb就自动产生,不知道理解的有没有问题。。。。
  • TCP控制块中的回调函数形参void *arg是个什么意思?
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
1条回答
Study_Stellaris
1楼-- · 2019-03-24 18:10
这里的 pcb 是指向 tcp_pcb 这种数据类型的指针。作为形参传给了函数。
肯定在其它地方是有定义的。
void *arg 表示可以指向任意类型的指针作为参数。

一周热门 更多>

相关问题

    相关文章