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

我正在测试TCP/IP的流控制,下面是我的环境。
客户端程序是一个速度较慢的读取器,并且具有单个套接字。
为了测试流控制,我在建立连接之后和接收数据之前将SO_RCVBUF的值减小到5000个字节。
我的期望是,我的服务器程序在发送5000+字节后应等待客户端读取。但是服务器程序会将数据发送到〜60000字节。
之后,服务器程序将等待客户端读取。客户端读取〜55000字节后,便可以看到接收缓冲区(5000bytes)的新值正在被利用。

是预期的吗?我想setsocketopt()的效果应该是立即的。在setsocketopt()之后,接收缓冲区的初始值应该没有任何作用。

问候,
普拉山斯

最佳答案

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

09-18 21:04