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.