https://blog.csdn.net/c359719435/article/details/8815499
[root@riyimei ~]# cat /proc/sys/net/core/rmem_max
212992
[root@riyimei ~]# cat /proc/sys/net/core/wmem_max
212992
[root@riyimei ~]# cat /proc/sys/net/core/rmem_default
212992
[root@riyimei ~]# cat /proc/sys/net/core/wmem_default
212992
[root@riyimei ~]# cat /proc/sys/net/ipv4/tcp_wmem
4096 16384 4194304
[root@riyimei ~]# cat /proc/sys/net/ipv4/tcp_rmem
4096 87380 6291456
[root@riyimei ~]#
疑惑3:linux手册中,接收缓冲区的默认值保存在/proc/sys/net/core/rmem_default,发送缓冲区保存在/proc/sys/net/core/wmem_default。
[root@cfs_netstorage core]# cat /proc/sys/net/core/rmem_default
1048576
[root@cfs_netstorage core]# cat /proc/sys/net/core/wmem_default
512488
可知,接收缓冲区的默认值是:1048576,1M。发送缓冲区的默认值是:512488,512K。为什么建立一个socket时得到的默认值是87380、16384?
linux下socket缓冲区大小的默认值在/proc虚拟文件系统中有配置。
分别在一下两个文件中:
/proc/sys/net/ipv4/tcp_wmem
[root@cfs_netstorage core]# cat /proc/sys/net/ipv4/tcp_wmem
4096 16384 131072 //第一个表示最小值,第二个表示默认值,第三个表示最大值。
/proc/sys/net/ipv4/tcp_rmem
[root@cfs_netstorage core]# cat /proc/sys/net/ipv4/tcp_rmem
4096 87380 174760
由此可见,新建socket,选取的默认值都是从这两个文件中读取的。可以通过更改这两个文件中的值进行调优,但是最可靠的方法还是在程序中调用setsockopt进行设置。通过 setsockopt的设置,能设置的接收缓冲区的最大值是8M,发送缓冲区的最大值是16M(Linux 2.6.6中)