2

我的查询与 setsocketopt() api 中的“SO_RCVBUF”选项有关。setsockopt() 中为 SO_RCVBUF 指定的新值何时生效?

我正在测试 TCP/IP 的流量控制,下面是我的环境。客户端程序是一个缓慢的阅读器,它只有一个套接字。为了测试流量控制,我在建立连接之后和接收数据之前将 SO_RCVBUF 的值减小到 5000 字节。我的期望是,我的服务器程序在发送 5000+ 字节后应该等待客户端读取。但是服务器程序将数据发送到 ~60000 字节。之后,服务器程序将等待客户端读取。一旦客户端读取了 ~55000 字节,我就会看到接收缓冲区的新值(5000 字节)被使用。

是预期的吗?我猜 setsocketopt() 的效果应该是立竿见影的。接收缓冲区的初始值在 setsocketopt() 之后应该没有任何影响。

问候, 普拉桑斯

4

1 回答 1

2

我认为您应该在调用之前设置 SO_RCVBUF connect(),因为那是分配缓冲区的时间。通过在之后调用它,它可能根本没有效果,或者您观察到的延迟效果。

于 2014-04-28T12:32:20.093 回答