小结:关于socket读写缓冲区

本文小结了socket的发送和接收缓冲区设置,指出缓冲区大小与单个IP包最大长度65535字节的区别。在实际大并发通讯中,设置接收缓冲区为256k未发现问题。公网UDP通信中,大于1k的UDP包可能被路由器丢弃,建议源地址预处理,切割包大小至1k以内。
摘要由CSDN通过智能技术生成

关于socket的发送缓冲区网上有诸多的讨论,这里个人小结一下,希望对以后有些帮助。首先,看下面一段代码,

//设定socket参数

#define dfUdpRcvCacheSize  256*1024 //256//接收缓冲区大小(字节)
 int optval,optlen = sizeof(int);
 optval=dfUdpRcvCacheSize; //设置读缓冲区 
 err=setsockopt(iSock,SOL_SOCKET,SO_RCVBUF,(char*)&optval,optlen);
 optval=dfUdpSndCacheSize; //设置读缓冲区
 err=setsockopt(iSock,SOL_SOCKET,SO_SNDBUF,(char*)&optval,optlen);

上面的代码无需解释,很多人应该都知道是在win32下面用来设置SOCKET接收发送缓冲区的,先不讨论上面的代码有没问题。既然提供了这样的API可以对缓冲区进行设置,那么究竟对缓冲区的设置是否有一个最大值的限制呢?先来看下网上各大技术论坛对该问题的讨论:

”只要是IP包就是65535字节,   也就是64K  
   
  这是由IP数据报的结构决定的  
   
  IP首部有个表示IP数据报总长度的16位字节,   其最大值表示为FFFF  
   
  因此最大值为65535  
   
  此数值不是纯粹的数据净负荷,而是包含了IP首部信息  
   
  而IP首部是20字节,   UDP首部是8字节  
   
  因此UDP数据部分是65535-20-8=65507   ”

显然,该段评论的论据本身是没错的,本人也专门翻了T

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值