Wenn Sie Ihre Puffergröße im Terminal sehen möchten, können Sie sich Folgendes ansehen:
/proc/sys/net/ipv4/tcp_rmem
(zum Lesen)/proc/sys/net/ipv4/tcp_wmem
(für schreiben)
Sie enthalten drei Zahlen, die Werte für die minimale, standardmäßige und maximale Speichergröße (in Byte) darstellen.
Wie bereits erwähnt, ist es jedoch möglich, die aktuelle Standardeinstellung zu sehen Socket-Puffergrößen in /proc
, es ist auch möglich, sie mit sysctl
zu überprüfen (Hinweis:Obwohl der Name ipv4 enthält, gelten diese Größen auch für ipv6-Sockets - der ipv6-Code tcp_v6_init_sock() ruft nur die ipv4-Funktion tcp_init_sock() auf):
sysctl net.ipv4.tcp_rmem
sysctl net.ipv4.tcp_wmem
Die Standard-Socket-Puffer werden jedoch nur gesetzt, wenn der Sock initialisiert wird, aber der Kernel passt sie dann dynamisch an (es sei denn, sie werden mit setsockopt() mit SO_SNDBUF gesetzt). Die tatsächliche Größe der Puffer für aktuell geöffnete Sockets kann mit ss
überprüft werden Befehl (Teil des iproute
/iproute2
Paket), das auch eine Reihe weiterer Informationen zu Sockets wie Überlastungskontrollparameter usw. bereitstellen kann. Zum Auflisten des aktuell geöffneten TCP (t
Option) Sockets und zugehörigen Speicher (m
) Informationen:
ss -tm
Hier ist eine Beispielausgabe:
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)
Hier ist eine kurze Erklärung von skmem (Socket-Speicher) - für weitere Informationen müssen Sie sich die Kernel-Quellen (z. B. sock.h) ansehen:
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
Um die Puffergröße im c/c++-Programm zu erhalten, ist der folgende Ablauf
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