[求助] TCP控制块回调函数困惑?

喜鹊王子   2013-4-26 13:49 楼主
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)

回复 楼主 喜鹊王子 的帖子

这里的 pcb 是指向 tcp_pcb 这种数据类型的指针。作为形参传给了函数。
肯定在其它地方是有定义的。
void *arg 表示可以指向任意类型的指针作为参数。
点赞  2013-4-28 17:01
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复