Каков максимальный размер сообщения датаграммы AF_UNIX, которое можно отправить в Linux?

В настоящее время я достиг жесткого предела в 130688 байт. Если я попытаюсь отправить что-то большее в одном сообщении, я получаю ошибку ENOBUFS.

Я проверил net.core.rmem_default, net.core.wmem_default, net.core.rmem_max, net.core.wmem_max и net. unix.max_dgram_qlen sysctl и увеличил их все, но они не имеют никакого эффекта, потому что они имеют дело с общим размером буфера, а не с размером сообщения.

Я также установил параметры сокета SO_SNDBUF и SO_RCVBUF, но это та же проблема, что и выше. Размер буфера сокета по умолчанию в любом случае устанавливается на основе параметров сокета _default.

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

Действительно ли максимальный размер 130688? Если нет, можно это изменить без перекомпиляции ядра?

Спасибо!

14
задан nos 18 January 2011 в 21:46
поделиться