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参数不需要改变的,只是读取数值的,那么不用指针, 需要变化的用指针。