Как узнать размер буфера передачи у tcp сокета в линуксе
Никак найти не могу не в ioctl не в getsockopt
>Как узнать размер буфера передачи у 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);
}
спасибо теперь разобрался наконец
Линух динамически меняет размер буфера
и первоначальный у меня всё время потом менялся а я не въезжал что происходит
Теперь вроде понял
>спасибо теперь разобрался наконец
>Линух динамически меняет размер буфера
>и первоначальный у меня всё время потом менялся а я не въезжал
>что происходит
>Теперь вроде понял
То есть как менял?
Размер буфера можно поменять программно, в пределах значений MIN & MAX
Но чтоб ядро его само меняло...
С чего ты это взял в общем?
>>спасибо теперь разобрался наконец
>>Линух динамически меняет размер буфера
>>и первоначальный у меня всё время потом менялся а я не въезжал
>>что происходит
>>Теперь вроде понял
>
>
>То есть как менял?
>Размер буфера можно поменять программно, в пределах значений MIN & MAX
>Но чтоб ядро его само меняло...
>С чего ты это взял в общем?а с того что сам видел
Как в начале передачи большого файла размер буфера один
,а потом становится больше, но в пределах MAX.
это называется эээ не помню, вроде алгоритм Найквиста , но не уверен