网上资料说setsockopt是可以设置收发缓冲区的大小,如:
http://blog.csdn.net/jwybobo2007/article/details/6107419
http://blog.csdn.net/jwybobo2007/article/details/6156376
自己写了段C/S的代码做模拟测试,
客户端(port:33725)设置收、发缓冲区大小,服务端(port:4200)不做设置:
int32 iBufLen = 1024;
::setsockopt(cClient.get_sock(),SOL_SOCKET, SO_RCVBUF, &iBufLen, sizeof(int32));
::setsockopt(cClient.get_sock(),SOL_SOCKET, SO_SNDBUF, &iBufLen, sizeof(int32));
发送67200个字节的数据,服务端收到包后,原样返回。
tcpdump信息:
系统默认缓冲区大小:-------------这个值是指系统级(或内核或硬件层,不知专业术语是啥)缓冲区?而setsockopt设的只是应用级的?
[root@master ~]# cat /proc/sys/net/ipv4/tcp_rmem
4096 87380 3969024
[root@master ~]# cat /proc/sys/net/ipv4/tcp_wmem
4096 16384 3969024
从tcpdump信息看,客户端发包时拆了几个16384大小的包发的,看来与setsockopt无关;服务端回应答时,前3个包时16384的大小,但之后变为1536,有个别人1024,看来与setsockopt有关,但有分析不出具体关系。
求高手指点一下迷津,多谢
或者说怎么测试,才能测出SO_RCVBUF、SO_SNDBUF的效果?
系统:
Linux master 2.6.32-358.el6.x86_64 #1 SMP Fri Feb 22 00:31:26 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux