在Linux中的运行时指定UDP接收缓冲区大小


问题描述
在Linux中,可以使用以下命令为网络数据包(例如UDP)指定系统的默认接收缓冲区大小:

sysctl -w net.core.rmem_max=<value>
sysctl -w net.core.rmem_default=<value>
但是我想知道,应用程序(例如,在c中)是否可以通过在运行时指定每个UDP套接字的接收缓冲区大小来覆盖系统的默认值?

推荐答案
您可以从默认值增加该值,但不能将其增加到最大值以外.使用 setsockopt 更改SO_RCVBUF选项:

int n = 1024 * 1024;
if (setsockopt(socket, SOL_SOCKET, SO_RCVBUF, &n, sizeof(n)) == -1) {
  // deal with failure, or ignore if you can live with the default size
}

更改配置

vi /etc/sysctl.conf
增加或修改 net.ipv4.udp_mem项
net.ipv4.udp_mem = min pressure max
再设一下 net.ipv4.udp_rmem_min
具体含义man udp 查看
完成后执行 sysctl -p 生效

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM