GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So finden Sie die Socket-Puffergröße von Linux

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

Linux
  1. So verwenden Sie den Linux-Befehl find zum Suchen von Dateien

  2. So finden Sie alle Sparse-Dateien in Linux

  3. So ändern Sie die MTU-Größe unter Linux

  4. Wie finde ich die maximale Stapelgröße?

  5. Wie man die Ergebnisse von 'find' unter Linux an mv weiterleitet

So finden Sie die Portnummer eines Dienstes in Linux

So ermitteln Sie die Größe eines Verzeichnisses in Linux

So finden Sie die IP-Adresse unter Linux

So ermitteln Sie die Gesamtgröße eines Verzeichnisses in Linux

So finden Sie Dateien mit dem fd-Befehl in Linux

So finden Sie die Liste der installierten Repositories in Linux