【发布时间】:2020-01-28 05:09:14
【问题描述】:
上下文
管理多个套接字连接的标准做法是使用poll 或select。这允许调用线程(或任务,在这种情况下)阻塞,直到操作系统检测到数据可供读取(此时它恢复任务)
问题
在 FreeRTOS 中,系统 API 为此提供了一种称为 FreeRTOS_select 的机制。但是,文档指定:
-
FreeRTOS_select采用xSocketSet_t类型的套接字集(参见上面的链接),其中包含xSocket类型的套接字。 -
xSocket是用 FreeRTOS_socket 创建的。 -
FreeRTOS_socket的文档指出xType(套接字类型)引用:“必须设置为 FREERTOS_SOCK_DGRAM”(参见上面的链接)。
如果只能创建数据报套接字,则不能将此选择调用与流套接字一起使用。在搜索创建流套接字时,我发现示例中对 FreeRTOS_socket here 的调用相同。但是,这是针对称为“FreeRTOS + TCP”的东西,API 没有select 的示例。返回的套接字类型不是xSocket_t,而是Socket_t。
那么如何将 select 与 TCP 套接字一起使用?对此似乎没有一个直接的答案。我遇到的问题是我想使用 FreeRTOS 的内置 select 功能,因为它们可以自动为我管理任务。可能无法使用基于库的选择。
【问题讨论】:
标签: c sockets select freertos lwip