FreeRTOS Select TCP 套接字不可用?
FreeRTOS Select with TCP sockets unavailable?
上下文
管理多个套接字连接的标准做法是使用poll
或select
。这允许调用线程(或任务,在这种情况下)阻塞,直到操作系统检测到数据可供读取(此时它恢复任务)
问题
在 FreeRTOS 中,系统 API 为此提供了一种称为 FreeRTOS_select 的机制。但是,文档指定:
FreeRTOS_select
采用 xSocketSet_t
类型的套接字集(参见上面的 link),其中包含 xSocket
类型的套接字。
xSocket
是用 FreeRTOS_socket 创建的。
FreeRTOS_socket
的文档指出 xType
(套接字类型)引用:"Must be set to FREERTOS_SOCK_DGRAM"(参见上面的 link)。
如果您只能创建数据报套接字,则不能将此 select 调用与流套接字一起使用。在搜索创建流套接字时,我发现示例中对 FreeRTOS_socket
here 的相同调用。但是,这是针对名为 "FreeRTOS + TCP" 的内容,而 API 没有 select
的示例。返回的套接字类型不是 xSocket_t
而是 Socket_t
.
那么如何将 select 与 TCP 套接字一起使用呢?关于这一点似乎没有一个直接的答案。我遇到的问题是我想使用 FreeRTOS 的内置 select
函数,因为它们可以自动为我管理任务。使用基于库的 select 可能是不可能的。
看来我错了,有一个专门的 FreeRTOS_select
调用 select,TCP 在 this link 也可用。只是很难找到。这是我没有花足够的时间尝试使用其他方式查找 API 调用的错。
上下文
管理多个套接字连接的标准做法是使用poll
或select
。这允许调用线程(或任务,在这种情况下)阻塞,直到操作系统检测到数据可供读取(此时它恢复任务)
问题
在 FreeRTOS 中,系统 API 为此提供了一种称为 FreeRTOS_select 的机制。但是,文档指定:
FreeRTOS_select
采用xSocketSet_t
类型的套接字集(参见上面的 link),其中包含xSocket
类型的套接字。xSocket
是用 FreeRTOS_socket 创建的。FreeRTOS_socket
的文档指出xType
(套接字类型)引用:"Must be set to FREERTOS_SOCK_DGRAM"(参见上面的 link)。
如果您只能创建数据报套接字,则不能将此 select 调用与流套接字一起使用。在搜索创建流套接字时,我发现示例中对 FreeRTOS_socket
here 的相同调用。但是,这是针对名为 "FreeRTOS + TCP" 的内容,而 API 没有 select
的示例。返回的套接字类型不是 xSocket_t
而是 Socket_t
.
那么如何将 select 与 TCP 套接字一起使用呢?关于这一点似乎没有一个直接的答案。我遇到的问题是我想使用 FreeRTOS 的内置 select
函数,因为它们可以自动为我管理任务。使用基于库的 select 可能是不可能的。
看来我错了,有一个专门的 FreeRTOS_select
调用 select,TCP 在 this link 也可用。只是很难找到。这是我没有花足够的时间尝试使用其他方式查找 API 调用的错。