web-dev-qa-db-ja.com

Linuxのソケットバッファサイズを見つける方法

Linuxのデフォルトのソケットバッファサイズは何ですか?表示するコマンドはありますか?

53
Freewind

ターミナルでバッファサイズを確認したい場合は、以下をご覧ください。

  • /proc/sys/net/ipv4/tcp_rmem(読み取り用)
  • /proc/sys/net/ipv4/tcp_wmem(書き込み用)

これらには、それぞれ最小、デフォルト、および最大のメモリサイズ値(バイト単位)である3つの数値が含まれています。

99
saeedn

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
28
Dinesh P.R.

指摘されているように、/procの現在のdefaultソケットバッファーサイズを確認することもできますが、確認することもできます。 sysctlを使用して(注:名前にipv4が含まれていますが、これらのサイズはipv6ソケットにも適用されます-ipv6 tcp_v6_init_sock()コードは単にipv4 tcp_init_sock()関数を呼び出します):

 sysctl net.ipv4.tcp_rmem
 sysctl net.ipv4.tcp_wmem

ただし、デフォルトのソケットバッファーは、靴下が初期化されたときに設定されますが、カーネルはSO_SNDBUFでsetsockopt()を使用して設定しない限り、動的にサイズを設定します。現在開いているソケットのバッファーの実際のサイズは、ssコマンド(iprouteパッケージの一部)を使用して検査できます。これは、輻輳制御パラメーターなどのソケットに関する詳細な情報も提供できます。現在開いている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
1
Pierz