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

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

sysctl -w net.core.rmem_max=<value> sysctl -w net.core.rmem_default=<value> 

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

Solutions Collecting From Web of "在Linux中指定运行时的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 } 

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