2012-04-02 1 views
1

私はソケットのSO_SNDBUFの最大サイズを取得する猫は、/ proc/sys/net /コア/ wmem_maxことができますが、開口部のクルージ感の工程を経ることなく、Cでその値を照会するための簡単な方法があると知っていますファイル、読み込み、整数への変換?Cで最大ソケット送信バッファサイズを照会していますか?

+0

私の知る限りで、現在の残りのバッファを取得することができます。 –

答えて

2

net.ipv4.tcp_wmemのsysctlの値を取得するには、あなたが本当にLinux上では良い方法はありません(それはsysctlを表す/ procファイルのうち、それを解析する必要があり、 sysctlシステムコールは長い間廃止されています。)

以下のような

何か:特定のソケットの

unsigned long wmem_min,wmem_default,wmem_max; 
FILE *f = fopen("/proc/sys/net/ipv4/tcp_wmem", "r"); 
if(f == NULL) 
    fail(); 
if(fscanf(f, "%lu %lu %lu", &wmem_min,&wmem_default,&wmem_max) != 3) 
    fail(); 

fclose(f); 
... use wmem_max 

は、あなたが唯一の方法だ

socklen_t optlen; 
  int send_buf, rc; 
 optlen = sizeof(send_buf); 
 //if getsockopt is successful, send_buf will hold the buffer size 
 rc = getsockopt(sockfd, SOL_SOCKET, SO_SNDBUF, &send_buf, &optlen); 
0

は、あなたがこの情報を取得する(システム()またはのpopen/pclose()を使用)シェル上のsysctlコマンドを呼び出すことができませんでした...少なくとも、ファイルを開く回避同等のかもしれ全体的な醜さに:

system("sysctl -n net.ipv4.tcp_wmem");