В Linux можно определить, что значение по умолчанию системы получает размер буфера для сетевых пакетов, скажем UDP, с помощью следующих команд:
sysctl -w net.core.rmem_max=<value>
sysctl -w net.core.rmem_default=<value>
Но интересно, это возможный для приложения (скажите, в c
) для переопределения значений по умолчанию системы путем определения получить размера буфера на UDP снабжают сокетом во времени выполнения?
Вы можете увеличить значение по умолчанию, но вы не можете увеличить его за пределы максимального значения. Используйте SetsockOPT
для изменения опции SO_RCVBUF
:
int n = 1024 * 1024;
if (setsockopt(socket, SOL_SOCKET, SO_RCVBUF, &n, sizeof(n)) == -1) {
// deal with failure, or ignore if you can live with the default size
}
Обратите внимание, что это портативный раствор; Он должен работать на любой POSIX платформе для увеличения размера буфера получения. In Linux имел autoTuning autoTuning в настоящее время (с 2.6,7, а с разумными максимальными размерами буферов с 2.6.17), что автоматически регулирует размер буфера приема на основе нагрузки. На ядрах с AutOutuning рекомендуется не установить размер буфера приема с использованием SetsockOpt
, так как это отключит автозапуск ядра. Использование SetsockOPT
Для регулировки размера буфера все еще может потребоваться на других платформах.