码迷,mamicode.com
首页 > 其他好文 > 详细

tcp与udp缓冲区大小总结(转载)

时间:2015-08-01 17:15:28      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:

1.tcp收发缓冲区默认值  

[root@localhost /]# cat /proc/sys/net/ipv4/tcp_rmem

4096    87380   4194304

87380  :tcp接收缓冲区的默认值  

[root@localhost /]# cat /proc/sys/net/ipv4/tcp_wmem

4096    16384   4194304

16384  : tcp发送缓冲区的默认值  

 

2.udp收发缓冲区默认值

[root@localhost /]# cat /proc/sys/net/core/rmem_default

110592

110592:udp接收缓冲区的默认值

[root@localhost /]# cat /proc/sys/net/core/wmem_default

110592

110592:udp发送缓冲区的默认值

 

3. tcp 或udp收发缓冲区最大值

[root@localhost /]# cat /proc/sys/net/core/rmem_max

131071

131071:tcp 或 udp 接收缓冲区最大可设置值的一半。

也就是说调用 setsockopt(s, SOL_SOCKET, SO_RCVBUF, &rcv_size, &optlen);  时rcv_size 如果超过 131071,那么

getsockopt(s, SOL_SOCKET, SO_RCVBUF, &rcv_size, &optlen); 得到的值就等于 131071 * 2 = 262142  

[root@localhost /]# cat /proc/sys/net/core/wmem_max  131071

131071:tcp 或 udp 发送缓冲区最大可设置值的一半。

跟上面同一个道理  

 

4. tcp 或udp收发缓冲区最小值

tcp 或udp接收缓冲区的最小值为 256 bytes,由内核的宏决定;

tcp 或udp发送缓冲区的最小值为 2048 bytes,由内核的宏决定

 

例子:

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

如果默认的udp缓冲区的最大值为 110592 Bytes,当通过setsockopt()函数想将其设置为300KB时,超过了最大上限的2倍,因此用getsockopt()函数获取实际设置的缓冲区长度为221184Bytes(110592*2)。

tcp与udp缓冲区大小总结(转载)

标签:

原文地址:http://www.cnblogs.com/blue-sky-hahaha/p/4694301.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!