Linux 正在设置套接字接收缓冲区大小,将被截断为244KB
我试图在linux上使用setsockopt()增加套接字接收缓冲区大小。我可以成功地将其设置为244KB以下的任何值。任何高于244KB的值都会被截断为244KB 似乎存在某种系统限制,但我无法确定其来源,因为它与以下值不一致:Linux 正在设置套接字接收缓冲区大小,将被截断为244KB,linux,sockets,buffer,Linux,Sockets,Buffer,我试图在linux上使用setsockopt()增加套接字接收缓冲区大小。我可以成功地将其设置为244KB以下的任何值。任何高于244KB的值都会被截断为244KB 似乎存在某种系统限制,但我无法确定其来源,因为它与以下值不一致: $ cat /proc/sys/net/ipv4/tcp_rmem 4096 87380 4194304 $ cat /proc/sys/net/ipv4/tcp_wmem 4096 16384 4194304 $ cat /proc/sys/
$ cat /proc/sys/net/ipv4/tcp_rmem
4096 87380 4194304
$ cat /proc/sys/net/ipv4/tcp_wmem
4096 16384 4194304
$ cat /proc/sys/net/core/rmem_default
124928
$ cat /proc/sys/net/core/wmem_default
124928
默认值如预期的那样是87380,但我不能将其增加到4194304。它被限制为244KB。有趣的是,这个值是2X rmem_默认值,我需要更改它吗
感谢来自TCP手册页的:
因此,在分配时,您传递给
So_SNDBUF/So_RCVBUF
的值会加倍。因此,您无法在setsockopt
中传递最大值(4194304)。谢谢,我可以通过更改net.core.rmem_max来更改它
The maximum sizes for socket buffers declared via the SO_SNDBUF and
SO_RCVBUF mechanisms are limited by the global net.core.rmem_max and
net.core.wmem_max sysctls. Note that TCP actually allocates twice the
size of the buffer requested in the setsockopt(2) call, and so a suc-
ceeding getsockopt(2) call will not return the same size of buffer as
requested in the setsockopt(2) call