В настоящее время я достиг жесткого предела в 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
, но это имеет ту же проблему, что и выше. В любом случае размер буфера сокета по умолчанию устанавливается на основе параметров сокета по умолчанию.
Я просмотрел исходный код ядра, где ENOBUFS
возвращается в стеке сокетов, но мне было непонятно, откуда он взялся. Единственные места, которые, похоже, возвращают эту ошибку, связаны с невозможностью выделить память.
Максимальный размер на самом деле 130688? Если нет, можно ли это изменить без перекомпиляции ядра?