Определение UDP получает размер буфера во времени выполнения в Linux

В Linux можно определить, что значение по умолчанию системы получает размер буфера для сетевых пакетов, скажем UDP, с помощью следующих команд:

sysctl -w net.core.rmem_max=<value>
sysctl -w net.core.rmem_default=<value>

Но интересно, это возможный для приложения (скажите, в c) для переопределения значений по умолчанию системы путем определения получить размера буфера на UDP снабжают сокетом во времени выполнения?

26
задан Brian Campbell 20 January 2010 в 23:32
поделиться

1 ответ

Вы можете увеличить значение по умолчанию, но вы не можете увеличить его за пределы максимального значения. Используйте 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 Для регулировки размера буфера все еще может потребоваться на других платформах.

29
ответ дан 28 November 2019 в 07:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: