分析lwip回调数据结构

struct tcp_pcb *tcp_client_pcb;

tcp_client_pcb = tcp_new();

tcp_recv(tcp_client_pcb,TCP_Client_Recv);

void
tcp_recv(struct tcp_pcb *pcb, tcp_recv_fn recv)
{
  if (pcb != NULL) {
    LWIP_ASSERT("invalid socket state for recv callback", pcb->state != LISTEN);
    pcb->recv = recv;
  }
}

err_t  TCP_Client_Recv(void *arg, struct tcp_pcb *pcb,struct pbuf *p,err_t err)

{

    struct pbuf *p_temp = p;
    
    if(p_temp != NULL)
    {    
        tcp_recved(pcb, p_temp->tot_len);

。。。。

}

===============================================================

上面这个的特点是p 与 pcb是有关联的。

===============================================================

struct udp_pcb *bl_upcb_Snd = NULL;

bl_upcb_Snd = udp_new();

udp_recv(bl_upcb_Snd, bl_udp_recCallback, NULL);

void
udp_recv(struct udp_pcb *pcb, udp_recv_fn recv, void *recv_arg)
{
  /* remember recv() callback and user data */
  pcb->recv = recv;
  pcb->recv_arg = recv_arg;
}

void bl_udp_recCallback(void *arg, struct udp_pcb *upcb, struct pbuf *p, struct ip4_addr *addr, u16_t port)

{......}

bl_udp_recCallback参数不需要改变的,只是读取数值的,那么不用指针, 需要变化的用指针。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值