URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 2801
[ Назад ]

Исходное сообщение
"Как узнать размер буфера передачи у tcp сокета в линуксе"

Отправлено gen , 14-Апр-04 13:49 
Как узнать размер буфера передачи у tcp сокета в линуксе
Никак найти не могу не в ioctl не в getsockopt

Содержание

Сообщения в этом обсуждении
"Как узнать размер буфера передачи у tcp сокета в линуксе"
Отправлено asdfgf , 14-Апр-04 16:12 
>Как узнать размер буфера передачи у tcp сокета в линуксе
>Никак найти не могу не в ioctl не в getsockopt


Плохо ищешь :-)
man 7 socket:

SO_SNDBUF
    Sets  or  gets the maximum socket send buffer in bytes.  The default
    value is set by the wmem_default  sysctl  and  the  maximum  allowed
    value is set by the wmem_max sysctl.

SO_SNDBUF
    Задает  или  считывает  максимальный  размер буфера
    передачи сокета в байтах.   Значение  по  умолчанию
    устанавливается   sysctl-вызовом   wmem_default,  а
    максимальное        значение        устанавливается
    sysctl-вызовом wmem_max.

Еще кое-какую информацию можно подчерпнуть из /usr/src/linux/Documentation/networking/ip-sysctl.txt (поищи по SO_SNDBUF)
также у нас есть замечательное место:
/proc/sys/net/ipv4/tcp_wmem, тут записано min, default, max значение размеров буфера передачи у tcp сокета, для твоего ядра linux.

А на Си это будет выглядеть так(выдает default значение):
//все это дело можно сделать и с помощью sysctl вызовов, но не рекомендуется этого делать.
#include <stdio.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/types.h>
int main(char *argc, char *argv[])
{
        int my_socket;
        int sockbufsize=0;
        int size=sizeof(int);
        if((my_socket=socket(AF_INET,SOL_SOCKET,0))==-1)
        {
              perror("Error");
              return 0;
        }
        if(getsockopt(my_socket,SOL_SOCKET,SO_SNDBUF,(char*) &sockbufsize, &size)==-1)
        {
                perror("Error");
                return 0;
        }
        printf("%d\n",sockbufsize);
}


"Как узнать размер буфера передачи у tcp сокета в линуксе"
Отправлено gen , 28-Апр-04 13:49 
спасибо теперь разобрался наконец
Линух динамически меняет размер буфера
и первоначальный у меня всё время потом менялся а я не въезжал что происходит
Теперь вроде понял

"Как узнать размер буфера передачи у tcp сокета в линуксе"
Отправлено asdfgf , 29-Апр-04 14:03 
>спасибо теперь разобрался наконец
>Линух динамически меняет размер буфера
>и первоначальный у меня всё время потом менялся а я не въезжал
>что происходит
>Теперь вроде понял


То есть как менял?
Размер буфера можно поменять программно, в пределах значений MIN & MAX
Но чтоб ядро его само меняло...
С чего ты это взял в общем?


"Как узнать размер буфера передачи у tcp сокета в линуксе"
Отправлено gen , 02-Июн-04 14:27 
>>спасибо теперь разобрался наконец
>>Линух динамически меняет размер буфера
>>и первоначальный у меня всё время потом менялся а я не въезжал
>>что происходит
>>Теперь вроде понял
>
>
>То есть как менял?
>Размер буфера можно поменять программно, в пределах значений MIN & MAX
>Но чтоб ядро его само меняло...
>С чего ты это взял в общем?

а с того что сам видел
Как в начале передачи большого файла размер буфера один
,а потом становится больше, но в пределах MAX.
это называется эээ не помню, вроде алгоритм Найквиста , но не уверен