2015-11-18 5 views
3
int n = 0; 
if (0 != getsockopt(iSockFd,SOL_SOCKET,SO_RCVBUF, &n, sizeof(n))) 
{ 
    printf("Get socket option failed, errno: %d\n",errno); 
} 
else 
{ 
    printf("Current socket buff len = %d\n", n); 
} 
n = 225280; 
if(0 != setsockopt(iSockFd, SOL_SOCKET, SO_RCVBUF, (const void *)&n, sizeof(n))) 
{ 
    printf("setsock err errno %d\n", errno); 
} 
else 
{ 
    printf("setsock opt success\n"); 
} 
n = 0; 
if (0 != getsockopt(iSockFd,SOL_SOCKET,SO_RCVBUF, &n, sizeof(n))) 
{ 
    printf("Get socket option failed, errno: %d\n",errno); 
} 
else 
{ 
    printf("After setting socket buff len = %d\n", n); 
} 

Выход есть -Оправа размер буфера не увеличивая

Текущее гнездо любителем Len = 41600

setsock неавтоматического успеха

После установки гнезда бафф LEN = 41600.

Похоже получить размер буфера не увеличивается, любая идея, почему это происходит?

Заранее благодарен!

+0

Платформа может свободно корректировать фактическое значение вверх или вниз. В буфере сокетов не так много места, что большой. – EJP

+0

@Coder: Можете ли вы поделиться версией ядра linux и конфигурациями в следующих файлах, чтобы улучшить изображение:/proc/sys/net/ipv4/tcp_moderate_rcvbuf /proc/sys/net/ipv4/tcp_rmem /proc/sys/net/core/rmem_default /proc/sys/net/core/rmem_max /proc/sys/net/ipv4/tcp_rmem –

ответ

1

Если ядро ​​имеет более новую версию (2.6.17 или новее), проверьте, включена ли автонастройка, проверяя файл/proc/sys/net/ipv4/tcp_moderate_rcvbuf. Если значение tcp_moderate_rcvbuf равно 1, автонастройка включена. В таком случае буфер приема будет динамически обновляться ядром и привязан к значениям в/proc/sys/net/ipv4/tcp_rmem. Проверьте, не попал ли этот предел.

Если ядро ​​имеет более старую версию, проверьте, ограничено ли SO_RCVBUF значениями в/proc/sys/net/core/rmem_default и/proc/sys/net/core/rmem_max. Включение TCP, также проверьте значение/proc/sys/net/ipv4/tcp_rmem

Также обратите внимание, что «Ручная настройка размеров буфера сокета с помощью setsockopt() отключает автонастройку». Вот хорошая ссылка на настройку для linux http://www.psc.edu/index.php/networking/641-tcp-tune

 Смежные вопросы

  • Нет связанных вопросов^_^