tcp与udp缓冲区大小总结

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)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值