>Как узнать размер буфера передачи у 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);
}