2.6.9-55.ELsmp、x86_64 を実行している Linux ボックスを実行しています。
C を使用して setsockopt() 関数を使用して TCP 受信ウィンドウを設定しようとしています。次のことを試します。
rwnd = 1024;
setsockopt(sock, SOL_SOCKET, SO_RCVBUF, (char *)&rwnd, sizeof(rwnd));
上記のコード セグメントは、サーバーからデータを受信するクライアント プログラムにあります。プログラムを起動して tcpdump 出力を受信して観察すると、次のようなウィンドウ ネゴシエーションが観察されます。
11:34:40.257755 IP clientReceiver.42464 > serverSender.8991:
S 1742042788:1742042788(0) win 5840
<mss 1460,sackOK,timestamp 1688222886 0,nop,wscale 2>
クライアント プログラムが実際には、クライアント プログラムで設定したものとは異なるウィンドウをネゴシエートしていることがわかります。ただし、Steven のテキスト ("TCP/IP Illustrated, Volume 1") セクション 20.4 をどのように解釈できるかから、私が使用する setsockopt() 呼び出しを使用して、セクション 20.4 の 2 番目のブロック引用で彼が参照しているものに影響を与えると思います (上記を参照)。 )。
どこが間違っているのかを理解したいです。
おそらく、スティーブンスが言っていることの私の解釈は間違っています。その場合、受信バッファサイズの正しい設定方法を教えていただけないでしょうか? 私の混乱の証拠として、http://linux.die.net/man/7/tcp にある Linux TCP ソケットのマニュアル ページを参照してください(SO_RCFBUF のコメントを参照)。
この話で私が見逃しているものは何ですか?受信バッファーのサイズを制御するには (そして tcpdump の出力に表示するにはどうすればよいですか?) ここで、ソケット オプション SO_RCFBUF の設定を暗示していることに注意してください。それが SYN のウィンドウ ネゴシエーションに表示されることを理解しています。
どんな入力でも大歓迎です。