問題描述
在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 生效