Ответ 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 для увеличения размера буфера приема. Linux уже автонастройка некоторое время (начиная с версии 2.6.7 и разумные максимальные размеры буфера начиная с 2.6.17), который автоматически корректирует размер буфера приема на основе нагрузки. В ядрах с автонастройкой рекомендуется не устанавливать размер буфера приема с помощью setsockopt
, так как это отключит автонастройку ядра. Однако использование setsockopt
для настройки размера буфера может потребоваться на других платформах.