https://blog.csdn.net/c359719435/article/details/8815499
[root@riyimei ~]# cat /proc/sys/net/core/rmem_max212992[root@riyimei ~]# cat /proc/sys/net/core/wmem_max212992[root@riyimei ~]# cat /proc/sys/net/core/rmem_default212992[root@riyimei ~]# cat /proc/sys/net/core/wmem_default212992[root@riyimei ~]# cat /proc/sys/net/ipv4/tcp_wmem4096 16384 4194304[root@riyimei ~]# cat /proc/sys/net/ipv4/tcp_rmem4096 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_default1048576[root@cfs_netstorage core]# cat /proc/sys/net/core/wmem_default512488可知,接收缓冲区的默认值是: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_wmem4096 16384 131072 //第一个表示最小值,第二个表示默认值,第三个表示最大值。/proc/sys/net/ipv4/tcp_rmem[root@cfs_netstorage core]# cat /proc/sys/net/ipv4/tcp_rmem4096 87380 174760由此可见,新建socket,选取的默认值都是从这两个文件中读取的。可以通过更改这两个文件中的值进行调优,但是最可靠的方法还是在程序中调用setsockopt进行设置。通过 setsockopt的设置,能设置的接收缓冲区的最大值是8M,发送缓冲区的最大值是16M(Linux 2.6.6中)
