仪陇家园分类信息网、仪陇生活网、仪陇家园网

搜索

linux下查看系统socket读写缓冲区

[复制链接]
seo 发表于 2022-5-31 13:31:41 | 显示全部楼层 |阅读模式
linux下查看系统socket读写缓冲区发布时间:2022/5/31 13:10:39
            
                                                       
                                                       
            
        
        
               
                    一:linux下查看系统socket读写缓冲区大小配置:

http://blog.csdn.net/herecles/article/details/8146017



1. tcp 收发缓冲区默认值

[root@ www.linuxidc.com]# cat /proc/sys/net/ipv4/tcp_rmem  

4096    87380   4161536

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

[root@ www.linuxidc.com]# cat /proc/sys/net/ipv4/tcp_wmem

4096    16384   4161536

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

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

[root@ www.linuxidc.com]# 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@ www.linuxidc.com]# cat /proc/sys/net/core/wmem_max  

131071

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

跟上面同一个道理

3. udp收发缓冲区默认值

[root@ www.linuxidc.com]# cat /proc/sys/net/core/rmem_default   

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

[root@ www.linuxidc.com]# cat /proc/sys/net/core/wmem_default

111616

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

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

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

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



二:socket编程设置读写缓冲区大小:

http://blog.csdn.net/maopig/article/details/6982457

系统提供的socket缓冲区大小为8K,你可以将之设置为64K,尤其在传输实时视频时。

socket发送数据时候先把数据发送到socket缓冲区中,之后接受函数再从缓冲区中取数据,如果发送端特别快的时候,缓冲区很快就被填满(socket默认的是1024×8=8192字节),这时候我们应该根据情况设置缓冲区的大小,可以通过setsockopt函数实现

#include  
#include  
#include
#include  
#include  
#include  
#include  
#include  
  
int main(int argc,char **argv)
{
     int err = -1;        /* 返回值 */
     int s = -1;            /* socket描述符 */
     int snd_size = 0;   /* 发送缓冲区大小 */
     int rcv_size = 0;    /* 接收缓冲区大小 */
     socklen_t optlen;    /* 选项值长度 */
  
     /*
      * 建立一个TCP套接字
      */
     s = socket(PF_INET,SOCK_STREAM,0);
     if( s == -1){
         printf("建立套接字错误\n");
         return -1;     
     }
      
     /*
      * 先读取缓冲区设置的情况
      * 获得原始发送缓冲区大小
      */
     optlen = sizeof(snd_size);
     err = getsockopt(s, SOL_SOCKET, SO_SNDBUF,&snd_size, &optlen);
     if(err

}

运行后的结果:

发送缓冲区原始大小为: 16384 字节

接收缓冲区原始大小为: 87380 字节
  发送缓冲区大小为: 20480 字节
  接收缓冲区大小为: 20480 字节
从结果 看出ubuntu系统默认的发送缓冲区大小:16384字节,接收缓冲区87380字节

但是有个问题我设置的接收和发送缓冲区大小为:10*1024=10240字节,但是实际用getoptsock得到却是20480字节加了一倍。改成其他大小也是都是加倍。

这是由linux内核的算法决定的。
               
        
        
   
            
        
        
回复

使用道具 举报

全部回复0 显示全部楼层

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

楼主

审核员

热门推荐

联系客服 关注微信 下载APP 返回顶部 返回列表