Jika Anda ingin melihat ukuran buffer Anda di terminal, Anda dapat melihat:
/proc/sys/net/ipv4/tcp_rmem
(untuk dibaca)/proc/sys/net/ipv4/tcp_wmem
(untuk menulis)
Mereka berisi tiga angka, yaitu nilai ukuran memori minimum, default, dan maksimum (dalam byte).
Sementara, seperti yang telah ditunjukkan, adalah mungkin untuk melihat default saat ini ukuran buffer soket di /proc
, Anda juga dapat memeriksanya menggunakan sysctl
(Catatan:Meskipun namanya menyertakan ipv4, ukuran ini juga berlaku untuk soket ipv6 - kode ipv6 tcp_v6_init_sock() hanya memanggil fungsi ipv4 tcp_init_sock()):
sysctl net.ipv4.tcp_rmem
sysctl net.ipv4.tcp_wmem
Namun, buffer soket default hanya disetel saat kaus kaki diinisialisasi tetapi kernel kemudian secara dinamis mengukurnya (kecuali disetel menggunakan setockopt() dengan SO_SNDBUF). Ukuran sebenarnya dari buffer untuk soket yang sedang terbuka dapat diperiksa menggunakan ss
perintah (bagian dari iproute
/iproute2
paket), yang juga dapat memberikan lebih banyak info tentang soket seperti parameter kontrol kemacetan dll. E.g. Untuk mendaftar TCP yang sedang terbuka (t
opsi) soket dan memori terkait (m
) informasi:
ss -tm
Berikut ini beberapa contoh keluaran:
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)
Berikut penjelasan singkat tentang skmem (memori soket) - untuk info selengkapnya, Anda perlu melihat sumber kernel (mis. 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
Untuk mendapatkan ukuran buffer pada program c/c++ berikut adalah alurnya
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