c - 在setsockopt()中为SO_RCVBUF指定的新值何时生效?

标签 c sockets buffer prototype setsockopt

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

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

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

问候, 普拉珊特

最佳答案

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

关于c - 在setsockopt()中为SO_RCVBUF指定的新值何时生效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23341043/

相关文章:

c - 如何将赋值用作 != 运算符的操作数?

检查二维数组中的连接

c - 阻止 Linux 将 usb 条形码扫描器字符发送到控制台

javascript - 如何维护套接字事件内连接的每个用户的值(value)

matlab - MATLAB 中的循环缓冲区,**不**复制旧数据

C K&R 1.5.4 字数统计练习 1-9

python - 忽略旧的UDP数据包Python

C 套接字 : recv and send all data

c++ - 清除输入缓冲区中的所有其他字符

c++ - 控制台未返回 cin 缓冲区中预期的字符数