在Linux中在运行时指定UDP接收缓冲区大小
在Linux中,可以使用以下命令为网络数据包(例如UDP)指定系统的默认接收缓冲区大小:
sysctl -w net.core.rmem_max=<value>sysctl -w net.core.rmem_default=<value>
但我想知道,应用程序(例如in中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
}
请注意,这是便携式解决方案。它可以在任何POSIX平台上工作,以增加接收缓冲区的大小。Linux已经进行了一段时间的自动调整(自2.6.7版本开始,并且自2.6.17版本以来具有合理的最大缓冲区大小),它会根据负载自动调整接收缓冲区的大小。在具有自动调整功能的内核上,建议您不要使用设置接收缓冲区的大小setsockopt
,因为这将禁用内核的自动调整功能。setsockopt
但是,在其他平台上,仍然可能需要使用调整缓冲区大小。
以上是 在Linux中在运行时指定UDP接收缓冲区大小 的全部内容, 来源链接: utcz.com/qa/421911.html