关于SOCKET 接收发送 缓冲区 测试 SO_SNDBUF

 一直以来对网络都很感兴趣

今天对SOCKET的发送接收缓冲区做了测试

测试过程 文字描述如下

服务端 伪代码

  g_ListenSock2 =socket(AF_INET,SOCK_STREAM,0);

然后bind

然后 listen(g_ListenSock2

然后设置了发送缓冲与接收缓冲大小

int nSize = 1000*512;
setsockopt(g_ListenSock2,SOL_SOCKET,SO_RCVBUF,(char*)&nSize ,sizeof(int)); 
setsockopt(g_ListenSock2,SOL_SOCKET,SO_SNDBUF,(char*)&nSize ,sizeof(int));


然后开启线程,在线程里accept 阻塞调用 


客户端代码 简单 创建SOCKET 然后连接服务 也为阻塞socket 客户端得到的默认接收缓冲区大小为65536 也就是64K

当客户端连接到服务端时,int nLen = sizeof(int);
在服务端accept后,返回g_ClientSock 我们的到g_ClientSock的接收缓冲 结果为512000 也就是 服务端的监听套接字的缓冲大小,多次测试总结出 其缓冲区大小继承了监听套接字的缓冲区大小 结果nDefRecvBufSize = 512000
 getsockopt(g_ClientSock,SOL_SOCKET,SO_RCVBUF,(char*)&nDefRecvBufSize,&nLen);



在另外的按钮消息响应函数里 我们发送数据,个人以前一直以为 我客户端不接收的情况下 服务端最多也就能发送设置的缓冲区大小的字节,这里即也就是最多能发送512000字节,

可测试结果大跌眼镜

当我第一次发送数据小于512000时,第二次是完全可以发送512000大小的,测试发现 第一次发送缓冲区大小为1--511999(512000-1)时,第二次调用总是能发送成功512000字节大小,测试环境为win8 vs2010。客户端一个字节也不接收,也就是说这时候服务端第一次发送小于设定缓冲区大小时,第二次完全可以发送缓冲区大小数据的。

在异步下做测试 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值