下载 FreeRTOS
 

出色的 RTOS & 嵌入式软件

最新资讯
简化任何设备的身份验证云连接。
利用 CoAP 设计节能型云连接 IoT 解决方案。
11.0.0 版 FreeRTOS 内核简介:
FreeRTOS 路线图和代码贡献流程。
使用 FreeRTOS 实现 OPC-UA over TSN。

FreeRTOS_recv()

[FreeRTOS-Plus-TCP API 引用]

FreeRTOS_sockets.h
BaseType_t FreeRTOS_recv( Socket_t xSocket,
                          void *pvBuffer,
                          size_t xBufferLength,
                          BaseType_t xFlags );
		

从 TCP 套接字接收数据(请参阅 FreeRTOS_recvfrom() 了解 UDP 等效项)。

套接字须已通过 调用 FreeRTOS_socket() 创建, 并已绑定到端口号,且已连接到远程套接字。

可通过调用 FreeRTOS_bind() 将套接字显式绑定到端口号。

套接字可使用 FreeRTOS_connect() 主动连接到远程套接字。 如果在未绑定到端口号的套接字上调用 FreeRTOS_connect(), 并且 ipconfigALLOW_SOCKET_SEND_WITHOUT_BIND 的值 在 FreeRTOSIPConfig.h 中置为 1,则 TCP/IP 堆栈会自动将套接字绑定 到私有地址范围中的端口号。

或者,套接字可以使用 FreeRTOS_accept() 等待传入连接。

FreeRTOS_recv() 具有可选超时。 超时默认值为 ipconfigSOCK_DEFAULT_RECEIVE_BLOCK_TIME, 并使用 FREERTOS_SO_RCVTIMEO 参数进行修改 (在调用 FreeRTOS_setsockopt() 时)。 如果接收操作无法立即返回接收的字节,则 调用 RTOS 任务将保持为已阻止状态(以便其他任务可以 可以执行),直到接收到任何一个字节,或者 超时到期。

FreeRTOS-Plus-TCP [当前]未使用所有函数参数。 未使用的参数保留在函数的原型中, 确保与预期的标准伯克利套接字 API 一致, 并确保与 FreeRTOS-Plus-TCP 的未来版本兼容。

参数:

xSocket   从中读取数据的套接字的句柄。

pvBuffer   将放置接收数据的缓冲区。

xBufferLength   pcBuffer 参数指向的缓冲区的大小 pvBuffer 参数指向的缓冲区的大小(以字节为单位), 因此也是将读取的最大字节数。

ulFlags   目前未使用。 未来的 FreeRTOS-Plus-TCP 版本可能 会使用 ulFlags 参数实现接收选项。

返回:

如果接收成功,则返回接收的字节数(放置 在 pvBuffer 指向的缓冲区中)。

如果在接收数据之前发生超时,则返回 0。

如果没有足够的内存供套接字 创建 Rx 或 Tx 流,则返回 -pdFREERTOS_ERRNO_ENOMEM。

如果套接字已关闭,则返回 -pdFREERTOS_ERRNO_ENOTCONN 。

如果套接字接收到信号, 导致读取操作中止,则返回 -pdFREERTOS_ERRNO_EINTR 。

如果套接字无效,不是 TCP 套接字,或者未绑定,则 返回 -pdFREERTOS_ERRNO_EINVAL;

请注意,因为 FreeRTOS 未实现 errno, 在出现错误时的行为必然与 recv() 函数的行为不同, 后者完全符合预期的伯克利 套接字行为。

用法示例:

请参阅 《创建、配置和绑定 TCP 客户端和服务器套接字》一章 (位于 FreeRTOS-Plus-TCP 网络教程页面), 了解有关如何准备 TCP 套接字以接收数据的示例。

请参阅 接收 TCP 数据一章(位于 FreeRTOS-Plus-TCP 网络教程页面), 了解有关从 TCP 套接字接收数据的示例。

Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.