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)。