FreeRTOS_sockets.h
Socket_t FreeRTOS_accept( Socket_t xServerSocket,
struct freertos_sockaddr *pxAddress,
socklen_t *pxAddressLength );
接受 TCP 套接字的连接。
必须先创建套接字,
即通过调用 FreeRTOS_socket() 创建,
然后调用
FreeRTOS_bind() 将其绑定到一个端口,
再调用
FreeRTOS_listen() 将其置入监听状态。
默认情况下,将创建一个新的套接字(子套接字)来处理任何接受的连接。
新的套接字将由
FreeRTOS_accept() 返回,
并可立即使用。 子套接字会继承
父套接字的所有属性。
FREERTOS_SO_REUSE_LISTEN_SOCKET 参数可以在
调用 FreeRTOS_setsockopt() 时使用,
用以配置父套接字
处理任何接受的 连接本身,而无需创建子套接字
完成此操作。 当套接字一次只处理一个连接时,
这是一个节省资源的有用方法。 例如,如果套接字被用来
实现只允许一个同时连接的 telnet 服务器,
此时可采用此方法。
FreeRTOS_accept() 具有一个可选超时。该超时默认为
ipconfigSOCK_DEFAULT_RECEIVE_BLOCK_TIME,并在
调用 FreeRTOS_setsockopt() 时使用 FREERTOS_SO_RCVTIMEO 参数进行修改。 如果
如果接受操作没有立即成功,那么调用 RTOS 任务
将被保持在阻塞状态(以执行其他 RTOS 任务),
直至连接被接受或超时过期。
参数:
xServerSocket
|
接受新连接的
监听套接字的句柄。
|
pxAddress
|
指向 freertos_sockaddr 结构体的指针,
该结构体将被(通过 FreeRTOS_accept())填充 IP 地址和
接受连接的套接字的
端口号。
|
pxAddressLength
|
当前未使用,但应设置为
sizeof (struct freertos_sockaddr),以确保未来的
兼容性。
|
返回:
如果来自远程套接字的连接被接受,且创建了新的本地套接字
来处理接受的连接,则将返回
新套接字的句柄。
如果 xServerSocket 不是有效 TCP 套接字,则返回 FREERTOS_INVALID_SOCKET
。
如果 xServerSocket 不处于监听状态(请参阅
FreeRTOS_listen()),
则返回 FREERTOS_INVALID_SOCKET。
如果在来自远程套接字的连接被接受之前发生超时,
则返回 NULL。
注意,因为 FreeRTOS 未实现 errno,
在出现错误时的行为必然与 connect() 函数的行为不同,
后者完全符合预期的伯克利
套接字行为。
用法示例:
请参阅“创建、配置和绑定 TCP 服务器套接字”源
代码示例(详见
“创建、配置和绑定 TCP 客户端和服务器套接字”
一章,节选自《FreeRTOS-Plus-TCP 网络教程》)。
Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.