Я пишу клиент, который получает UDP-дейтаграммы от одного отправителя. Все операции ввода-вывода будут выполняться в одном потоке. Обычно данных либо не будет, либо поток 30 Мбит / с. Моя главная задача заключается в том, чтобы задержка была как можно ниже.
План состоит в том, чтобы блокировать в ожидании данных цикл с кратковременным таймаутом, чтобы поток ввода-вывода мог реагировать на запросы на отключение и т. Д.
Я склонен использовать блокирующий сокет, установить для него тайм-аут и сделать recvfrom()
вызов. Тем не менее, это выглядит гораздо реже, чем комбинация select()
/ poll()
и recvfrom()
для неблокирующего сокета.
Учитывая, что я работаю только с одним сокетом, кажется, что неблокирующий подход излишне сложен. Я что-то упустил? Есть ли причина предпочитать неблокирующие сокеты в этом конкретном случае?