FreeRTOS Select с TCP-сокетами недоступен? - PullRequest
0 голосов
/ 28 сентября 2019

Контекст

Стандартной практикой для управления несколькими соединениями сокетов является использование poll или select.Это позволяет вызывающему потоку (или задаче, в данном случае) блокироваться, пока операционная система не обнаружит, что данные доступны для чтения (с этого момента она возобновляет задачу)

Проблема

В FreeRTOSсистемный API предоставляет механизм для этого, называемый FreeRTOS_select .Однако в документации указано:

  1. FreeRTOS_select принимает набор сокетов типа xSocketSet_t (см. Ссылку выше), который содержит сокеты типа xSocket.
  2. xSocket создается с FreeRTOS_socket .
  3. В документации для FreeRTOS_socket говорится, что xType (тип сокета) цитата: «Должно быть установлено значение FREERTOS_SOCK_DGRAM»(см. ссылку выше).

Если вы можете создавать только сокеты датаграмм, вы не можете использовать этот вызов select с потоковыми сокетами.При поиске создания потоковых сокетов я обнаружил, что идентичный вызов FreeRTOS_socket здесь в примере.Однако это для чего-то, называемого «FreeRTOS + TCP», и у API нет примера для select.Тип возвращаемого сокета не xSocket_t, а Socket_t.


Так как же использовать select с TCP-сокетами?Кажется, нет однозначного ответа на этот вопрос.У меня проблема в том, что я хотел бы использовать встроенные select функции FreeRTOS, потому что они могут автоматически управлять задачей для меня.Использование библиотечного выбора может быть невозможным.

1 Ответ

1 голос
/ 28 сентября 2019

Похоже, я был не прав, есть выделенный FreeRTOS_select вызов для выбора с TCP тоже доступен на по этой ссылке .Это просто трудно найти.Это моя вина, что я не трачу достаточно времени, пытаясь найти вызовы API другими способами.

...