26 四月, 2006
Socket编程中发送接收缓冲大小设置
对于TCP,因为是可靠连接,所以,一个包被抛弃(发送方或者接受方),底层协议会要求再发送一次,或者阻塞在应用层。
而如果使用UDP,那么必须由应用层自己作逻辑判断,保证数据的完整性。否则阻塞时,包会被简单地丢弃。
Linxu 2.4中,
- 发送缓存的初始大小 : sysctl.net.core.wmem_default = 65536
- 发送缓存的最大值(bytes):sysctl.net.core.wmem_max = 65535
- 接收缓存的初始大小 : sysctl.net.core.rmem_default = 65536
- 接收缓存的最大值(bytes):sysctl.net.core.rmem_max = 65535
应用层,使用setsockopt(sock, SOL_SOCKET, SO_RCVBUF/SO_SNDBUF, &bufsize, (socklen_t)len)来设置send/receive buffer的最大值,此值不能超过sysctl中设置的最大对应值。所以,如果想增加缓冲大小,必须先修改系统配置,可以使用sysctl命令(reboot不保留),或者修改/etc/sysctl.conf(sysctl -p或者reboot后有效)
缓冲区增大,无疑会加重系统开销,要根据实际需求进行调节,不是大了就好。
对于UDP,写缓冲区和TCP不一样,UDP其实没有所谓的写缓冲区,SO_SNDBUF只是设置了当前发送包的最大尺寸
最新回复
发表评论



