当前位置:  开发笔记 > 后端 > 正文

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

如何解决《在Linux中指定运行时的UDP接收缓冲区大小》经验,为你挑选了1个好方法。

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

sysctl -w net.core.rmem_max=
sysctl -w net.core.rmem_default=

但我想知道,应用程序(例如,in c)是否可以通过在运行时指定每个UDP套接字的接收缓冲区大小来覆盖系统的默认值?



1> Brian Campbe..:

您可以从默认值增加该值,但不能将其增加到超出最大值.使用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
}

请注意,这是便携式解决方案; 它应该适用于任何POSIX平台以增加接收缓冲区大小.Linux已经进行了一段时间的自动调整(自2.6.7开始,并且自2.6.17以来具有合理的最大缓冲区大小),它会根据负载自动调整接收缓冲区大小.在具有自动调整功能的内核上,建议您不要使用设置接收缓冲区大小setsockopt,因为这将禁用内核的自动调整.setsockopt但是,在其他平台上仍然需要使用调整缓冲区大小.


自动调整仅适用于TCP,还是适用于TCP和UDP?
@kumar,看起来它只适用于答案[autotuning]中提到的链接的TCP(http://www.psc.edu/networking/projects/tcptune/#Linux)
推荐阅读
无名有名我无名_593
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有