ターミナルでバッファ サイズを確認したい場合は、以下を参照してください。
/proc/sys/net/ipv4/tcp_rmem
(読むため)/proc/sys/net/ipv4/tcp_wmem
(書き込み用)
これらには、それぞれ最小、デフォルト、および最大のメモリ サイズ値 (バイト単位) である 3 つの数値が含まれます。
指摘されているように、現在の default を確認することは可能です。 /proc
のソケット バッファ サイズ 、 sysctl
を使用してそれらを確認することも可能です (注:名前には ipv4 が含まれていますが、これらのサイズは ipv6 ソケットにも適用されます - ipv6 tcp_v6_init_sock() コードは ipv4 tcp_init_sock() 関数を呼び出すだけです):
sysctl net.ipv4.tcp_rmem
sysctl net.ipv4.tcp_wmem
ただし、デフォルトのソケット バッファは、sock が初期化されるときに設定されますが、カーネルは動的にサイズを変更します (setsockopt() を使用して SO_SNDBUF を使用して設定しない限り)。現在開いているソケットのバッファの実際のサイズは、ss
を使用して調べることができます。 コマンド (iproute
の一部) /iproute2
パッケージ)、輻輳制御パラメーターなどのソケットに関するより多くの情報を提供することもできます。現在開いている TCP (t
オプション) ソケットと関連メモリ (m
) 情報:
ss -tm
出力例を次に示します:
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)
skmem (ソケット メモリ) の簡単な説明は次のとおりです。詳細については、カーネル ソース (つまり、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
c/c++ プログラムでバッファ サイズを取得するには、次のフローを使用します
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