ioctl FIOREAD на сыром сокете в Linux - PullRequest
0 голосов
/ 30 апреля 2009

У меня есть реализация, которая использует ioctl (FIONREAD), чтобы определить число ожидающих октетов в буфере приема Raw Socket в Linux, а затем вызвать для этого recv.

Я где-то читал, что интерфейс ioctl для необработанных сокетов в Linux на самом деле не возвращает действительные ожидающие октеты. Это правильно?

Я спрашиваю, потому что время от времени теряю некоторые сообщения при высокой нагрузке и до сих пор не смог выяснить, где. Это лучший способ выяснить количество ожидающих октетов в необработанном сокете.

1 Ответ

1 голос
/ 02 мая 2009

Всегда существует вероятность того, что ядро ​​отбросит пакеты, если ваше приложение не сможет поддерживать скорость передачи пакетов (поскольку буфер ядра не является неограниченным).

Кстати, зачем вам знать число октетов? Так как это сокеты пакетов, длина пакета всегда будет ограничена максимальным размером кадра сетевого интерфейса, поэтому просто передайте достаточно большой буфер в recv.

Сказав, что, если производительность критична, вы должны изучить поддержку PACKET_MMAP в Linux.

...