關於Linux中TCP和UDP協議的發送和接收緩沖區


1. tcp 收發緩沖區默認值
[root@qljt core]# cat /proc/sys/net/ipv4/tcp_rmem
4096 87380 4161536(TCP接收緩沖區)

cat /proc/sys/net/ipv4/tcp_wmem
4096 16384 4161536(TCP發送緩沖區)

2. tcp 或udp收發緩沖區最大值
[root@qljt core]# cat /proc/sys/net/core/rmem_max 接收

[root@qljt core]# cat /proc/sys/net/core/wmem_max 發送

3. udp收發緩沖區默認值

[root@qljt core]# cat /proc/sys/net/core/rmem_default
111616:udp接收緩沖區的默認值

[root@qljt core]# cat /proc/sys/net/core/wmem_default
111616:udp發送緩沖區的默認值

可以通過setsockopt()和getsockopt()函數設置和獲取相應緩沖區的大小;

譬如:
int iSock = -1;
iSock = socket(AF_INET, SOCK_DGRAM, 0);
int iRecvLen = 300*1024;
int iRecvLen_2 = 0;
int iOptlen = 4;
int iRet = -1, iRet_2 = -1;
iRet = setsockopt(iSock, SOL_SOCKET, SO_RCVBUF, &iRecvLen, 4);
iRet_2 = getsockopt(iSock, SOL_SOCKET, SO_RCVBUF, &iRecvLen_2, &iOptlen);
printf("RecvLen 2 is %d[%d:%d].\n", iRecvLen_2, iRet, iRet_2);

因為我使用的Linux版本為:Fedora release 9 (Sulphur),其默認的udp緩沖區的最大值為 110592 Bytes,因此,當通過setsockopt()函數想將其設置為300KB時,超過了最大上限的2倍,因此用getsockopt()函數獲取實際設置的緩沖區長度為221184Bytes(110592*2)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM