在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