FreeRTOS Select TCP 套接字不可用?

FreeRTOS Select with TCP sockets unavailable?

上下文

管理多个套接字连接的标准做法是使用pollselect。这允许调用线程(或任务,在这种情况下)阻塞,直到操作系统检测到数据可供读取(此时它恢复任务)

问题

在 FreeRTOS 中,系统 API 为此提供了一种称为 FreeRTOS_select 的机制。但是,文档指定:

  1. FreeRTOS_select 采用 xSocketSet_t 类型的套接字集(参见上面的 link),其中包含 xSocket 类型的套接字。
  2. xSocket 是用 FreeRTOS_socket 创建的。
  3. 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 调用的错。