Одиночный вызов неблокирующему recvfrom - PullRequest
0 голосов
/ 26 марта 2012

Я просто пытаюсь понять, как работает неблокирующее recvfrom?Я пишу приложение, которое связывается с определенным устройством, которое отправляет данные со скоростью около 10 Мбит / с.Я сделал цикл infinte, который последовательно вызывает recvfrom, удаляет заголовок и копирует оставшуюся часть сообщения во временный буфер.Теперь мой вопрос:

Одиночный ли вызов неблокирующего recvfrom (учитывая наличие данных) возвращает только один пакет?Или возможно, что один recvfrom может также возвращать несколько сцепленных пакетов?

UPDATE

Да, я использую сокет без соединения (UDP).

Ответы [ 2 ]

1 голос
/ 26 марта 2012

recvfrom() возвращает не более одной дейтаграммы.

Для Linux существует специальный вызов recvmmsg() для получения нескольких дейтаграмм за один вызов.

1 голос
/ 26 марта 2012

Только одна дейтаграмма в случае UDP. Объединение пакетов нарушит одну из (немногих) фундаментальных гарантий, обеспечиваемых этим протоколом: сохранение границ между отправленными дейтаграммами.

Последние версии Linux имеют recvmmsg, что позволяет получать несколько дейтаграмм за системный вызов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...