我的查询与setsocketopt()api中的“SO_RCVBUF”选项有关。 在setsockopt()中为SO_RCVBUF指定的新值何时生效?
我正在测试TCP / IP的流量控制,下面是我的环境。 客户端程序是一个慢速阅读器,它有一个插槽。 为了测试流量控制,我在建立连接之后和接收数据之前将SO_RCVBUF的值减小到5000字节。 我的期望是,发送5000+字节后我的服务器程序应该等待客户端读取。但是服务器程序将数据发送到~60000字节。 之后,服务器程序将等待客户端读取。一旦客户端读取~55000字节,我就会看到接收缓冲区的新值(5000字节)被利用。
预期吗?我想setsocketopt()的效果应该是立即的。在setsocketopt()之后,接收缓冲区的初始值不应该有任何影响。
此致 普拉香特
答案 0 :(得分:1)
我认为你应该在调用connect()
之前设置SO_RCVBUF,因为这是分配缓冲区的时候。通过以后调用它可能根本没有效果,或者你观察到的延迟效果。