Контекст
Стандартной практикой для управления несколькими соединениями сокетов является использование poll
или select
.Это позволяет вызывающему потоку (или задаче, в данном случае) блокироваться, пока операционная система не обнаружит, что данные доступны для чтения (с этого момента она возобновляет задачу)
Проблема
В FreeRTOSсистемный API предоставляет механизм для этого, называемый FreeRTOS_select .Однако в документации указано:
FreeRTOS_select
принимает набор сокетов типа xSocketSet_t
(см. Ссылку выше), который содержит сокеты типа xSocket
. xSocket
создается с FreeRTOS_socket . - В документации для
FreeRTOS_socket
говорится, что xType
(тип сокета) цитата: «Должно быть установлено значение FREERTOS_SOCK_DGRAM»(см. ссылку выше).
Если вы можете создавать только сокеты датаграмм, вы не можете использовать этот вызов select с потоковыми сокетами.При поиске создания потоковых сокетов я обнаружил, что идентичный вызов FreeRTOS_socket
здесь в примере.Однако это для чего-то, называемого «FreeRTOS + TCP», и у API нет примера для select
.Тип возвращаемого сокета не xSocket_t
, а Socket_t
.
Так как же использовать select с TCP-сокетами?Кажется, нет однозначного ответа на этот вопрос.У меня проблема в том, что я хотел бы использовать встроенные select
функции FreeRTOS, потому что они могут автоматически управлять задачей для меня.Использование библиотечного выбора может быть невозможным.