当使用 10485760 的数值(这也是的设置SO_RCVBUF
所规定的当前限制,并且发送 UDP 数据包的速度超过接收端能够处理的速度)时,中的列总是增长到 的大小的两倍。 20972544 是我能观察到的最高值。sysctl
net.core.rmem_max
rx_queue
/proc/net/udp
SO_RCVBUF
所以是否未遵守 SO_RCVBUF? 或者 /proc/net/udp 的输出有误?
我的系统:
uname -a
Linux mybox 4.3.0-1-amd64 #1 SMP Debian 4.3.3-5 (2016-01-04) x86_64 GNU/Linux
答案1
来自插座(7)手册页:
SO_RCVBUF Sets or gets the maximum socket receive buffer in bytes. The kernel doubles this value (to allow space for bookkeeping overhead) when it is set using setsockopt(2), and this doubled value is returned by getsockopt(2). The default value is set by the /proc/sys/net/core/rmem_default file, and the maximum allowed value is set by the /proc/sys/net/core/rmem_max file. The minimum (doubled) value for this option is 256.
请注意,手册页表明内核将把指定的缓冲区值加倍用于记账开销。