关于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)。
版权声明:
作者:朝雾之归乡
出处:http://www.cnblogs.com/cnpirate
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。