我正在运行一个运行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
我们看到客户端程序实际上正在协商一个与我在客户端程序中设置的窗口不同的窗口.但是,从我如何解释Steven的文本("TCP/IP Illustrated,第1卷")第20.4节开始,我相信你使用我使用的setsockopt()调用来影响他在第20.4节的第二个块引用中引用的内容(见上文) ).
我想知道我哪里出错了.
也许我对史蒂文斯所说的话的解释是错误的.在这种情况下,你能指出我设置接收缓冲区大小的正确方法吗?为了证明我的困惑,我在http://linux.die.net/man/7/tcp上提到Linux TCP套接字手册页(请参阅SO_RCFBUF上的评论).
我在这个故事里想念的是什么?如何控制接收缓冲区大小(并将其显示在tcpdump输出中)?请注意,我在这里提到套接字选项SO_RCFBUF的设置 - 我理解这是SYN中窗口协商中出现的内容.
任何输入都表示赞赏.