zynq Lwip学习笔记-tcp_recv函数

前言

最近在学习zynq中的lwip协议族,找不到很好的记笔记的地方,所以就用csdn记录一下自己的学习过程。现在对lwip不熟悉,只是把官方的lwip echo server例程跑了一下,能跑通就一点点的照着学了,笔记都是根据自己的理解写的,而且部分内容可能也只针对lwip echo server例程有效,笔记可以供有缘人参考,但不敢保证全对,有不对的地方也期待有高人指点一二。

————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/weixin_40356705/article/details/136824649

一、概述

  • 原型
void tcp_recv(struct tcp_pcb *pcb, tcp_recv_fn recv)
  • 参数
    struct tcp_pcb *pcb :一个指向pcb结构体的指针
    recv :该pcb所对应的回调函数
  • 作用
    这个函数允许用户为给定的TCP PCB设置一个接收回调函数,但前提是PCB不为空且其状态不是LISTEN。

二、函数体

void tcp_recv(struct tcp_pcb *pcb, tcp_recv_fn recv)
{

LWIP_ASSERT_CORE_LOCKED();
//这是一个断言,用于确保在调用此函数时,核心(可能是与多线程或中断相关的核心功能)已经被锁定。这通常是为了确保函数在不被中断的情况下安全执行。
//**注意到该断言为空**,有些不太理解这个地方,既然是空的为什么要调用,是有什么没注意到的吗,求大神解答
if (pcb != NULL) {
//检查传入的pcb指针是否为非空。如果为空,则不执行后续操作。
LWIP_ASSERT("invalid socket state for recv callback", pcb->state != LISTEN);
//这是另一个断言,用于确保pcb的状态不是LISTEN。在TCP中,LISTEN状态表示套接字正在等待传入的连接请求。通常,你不能在LISTEN状态的套接字上设置接收回调函数,因为连接一旦建立,就会创建一个新的PCB来管理该连接。
pcb->recv = recv;//此语句为该函数的中心语句,也是该函数上层函数accept_callback的中心语句
//将传入的recv回调函数设置为pcb的接收回调函数。这样,当与该PCB关联的TCP连接收到数据时,这个回调函数就会被调用。
}
}

三、调用关系

被accept_callback调用,没有调用其他函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值