1

RCVBUF を 1MB//1048576 に設定しようとしていますが、getsockopt を介して読み取ろうとしているときに値を設定した後、常に 2MB//2097152 の値が返されます。以下のコードの問題を教えてください。

    unsigned int rcvBuf = getRcvBufValue();
    if (setsockopt (channelfd, SOL_SOCKET, SO_RCVBUF, &rcvBuf,sizeof (rcvBuf)) == -1) 
  {
         cout<<"RCV BUF IS NOT SET";
  }
      int rcvbuf = -1;
      socklen_t Rsize = sizeof(rcvbuf);
      getsockopt (channelfd, SOL_SOCKET, SO_RCVBUF,&rcvbuf,&Rsize);
      cout<<rcvbuf;
4

1 に答える 1

3

man 7 socketSO_RCVBUF オプションに関して次のように述べられています。

SO_RCVBUF

最大ソケット受信バッファーをバイト単位で設定または取得します。 setsockopt(2) を使用して設定すると、カーネルはこの値を 2 倍にし (ブックキーピング オーバーヘッドのためのスペースを確保するため)、この 2 倍の値が getsockopt(2) によって返されます。デフォルト値は /proc/sys/net/core/rmem_default ファイルによって設定され、最大許容値は /proc/sys/net/core/rmem_max ファイルによって設定されます。このオプションの最小 (2 倍) 値は 256 です。

于 2012-08-06T12:01:25.910 に答える