получение длины сообщения в udp перед recvfrom () - PullRequest
1 голос
/ 16 сентября 2011

Я пишу приложение для Linux на C, оно будет получать тысячи UDP-сообщений, которые могут иметь переменный размер. Почему-то мне нужно получить размер сообщения, прежде чем читать его в буфер с помощью svcall recvfrom (). Я не могу выделить память для максимально возможного сообщения, потому что, поскольку я использую MTU 9000 и получаю тысячи сообщений, много памяти будет потрачено впустую. Я проверил в Google, можно узнать, каков размер сообщения с параметром SO_NREAD для syscall getsockopt, однако это работает только на BSD. Я знаю, что сообщение находится где-то в ядре Linux, потому что мои сокеты работают в неблокирующем режиме, и события ядра сообщают мне, что данные доступны, поэтому где-то должно храниться длина сообщения, но как я могу получить это?

Заранее спасибо

1 Ответ

4 голосов
/ 16 сентября 2011

Возможно, вы захотите использовать ioctl с FIONREAD.Он доступен как для Linux, так и для BSD.

FIONREAD int Получить число байтов, которые сразу же доступны для чтения.

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