Socket缓冲区大小修改与系统设置


每个Socket在Linux中都映射为一个文件,并与内核中两个缓冲区(读缓冲区、写缓冲区)相关联。

或者说,每个Socket拥有两个内核缓冲区。

有时,我们需要修改缓冲区的内核限制的最大值,使其符合我们的实际需求。

https://blog.csdn.net/liuguanghui1988/article/details/53375269)

case SO_SNDBUF:

if (val > sysctl_wmem_max)

val = sysctl_wmem_max;

if ((val * 2 ) < SOCK_MIN_SNDBUF)

sk->sk_sndbuf = SOCK_MIN_SNDBUF;

else

sk->sk_sndbuf = val * 2 ;

系统这么做,猜测可能是由于UDP解包封包需要的额外的空间。

所以,我称r/wmem_max为:可由程序设置的缓冲区最大值。