Si desea ver el tamaño de su búfer en la terminal, puede consultar:
/proc/sys/net/ipv4/tcp_rmem
(para leer)/proc/sys/net/ipv4/tcp_wmem
(para escribir)
Contienen tres números, que son valores de tamaño de memoria mínimo, predeterminado y máximo (en bytes), respectivamente.
Si bien, como se ha señalado, es posible ver el predeterminado actual tamaños de búfer de socket en /proc
, también es posible verificarlos usando sysctl
(Nota:si bien el nombre incluye ipv4, estos tamaños también se aplican a los sockets ipv6; el código ipv6 tcp_v6_init_sock() solo llama a la función ipv4 tcp_init_sock()):
sysctl net.ipv4.tcp_rmem
sysctl net.ipv4.tcp_wmem
Sin embargo, los búferes de socket predeterminados solo se establecen cuando se inicializa el sock, pero luego el núcleo los dimensiona dinámicamente (a menos que se establezca mediante setsockopt() con SO_SNDBUF). El tamaño real de los búferes para los sockets actualmente abiertos se puede inspeccionar usando el ss
comando (parte del iproute
/iproute2
paquete), que también puede proporcionar mucha más información sobre sockets como el parámetro de control de congestión, etc. Para enumerar el TCP actualmente abierto (t
opción) sockets y memoria asociada (m
) información:
ss -tm
Aquí hay algunos resultados de ejemplo:
State Recv-Q Send-Q Local Address:Port Peer Address:Port
ESTAB 0 0 192.168.56.102:ssh 192.168.56.1:56328
skmem:(r0,rb369280,t0,tb87040,f0,w0,o0,bl0,d0)
Aquí hay una breve explicación de skmem (memoria de socket):para obtener más información, deberá consultar las fuentes del kernel (es decir, sock.h):
r:sk_rmem_alloc rb:sk_rcvbuf # current receive buffer size t:sk_wmem_alloc tb:sk_sndbuf # current transmit buffer size f:sk_forward_alloc w:sk_wmem_queued # persistent transmit queue size o:sk_omem_alloc bl:sk_backlog d:sk_drops
Para obtener el tamaño del búfer en el programa c/c++, el siguiente es el flujo
int n;
unsigned int m = sizeof(n);
int fdsocket;
fdsocket = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP); // example
getsockopt(fdsocket,SOL_SOCKET,SO_RCVBUF,(void *)&n, &m);
// now the variable n will have the socket size