Максимальная длина дейтаграммы UNIX в POSIX - PullRequest
0 голосов
/ 06 июля 2019

Учитывая socket(AF_UNIX, SOCK_DGRAM, 0), каков максимальный гарантированный размер дейтаграммы в байтах, который может быть отправлен без получения EMSGSIZE или любого другого номера ошибки, связанного с неверным сообщением. Другое требование состоит в том, что это сообщение будет отправлено атомарно, то есть оно не будет разбито, что заставит получателя такого сообщения сшивать его по частям.

Я ищу константу, определенную стандартом POSIX, и до сих пор не смог ее найти.

1 Ответ

0 голосов
/ 06 июля 2019

гарантии нет.В Linux есть параметры конфигурации ОС, net.core.{r,w}mem_max, в моем дистрибутиве они установлены по умолчанию, 208 КБ.Прочитайте /proc/sys/net/core/rmem_max и т. Д., Чтобы увидеть ограничения.Для действительно высокоскоростного ipc вы все равно хотите что-то вроде кольцевого буфера совместно используемой памяти, не нужно проходить через ОС для каждого сообщения, только чтобы разбудить другой конец, если он простаивает в ожидании буферов.

DGRAMсообщения всегда отправляются целыми, в AF_UNIX (иначе AF_LOCAL) нет такой вещи, как сегментация (так как она полностью внутри коробки).Если вы не предоставите достаточно большой приемный буфер, остаток скорее всего просто будет отброшен.

...