关于SOCKET 接收发送 缓冲区 测试 SO_SNDBUF
来源:互联网 发布:公司网络品牌维护 编辑:程序博客网 时间:2024/06/07 01:02
一直以来对网络都很感兴趣
今天对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。客户端一个字节也不接收,也就是说这时候服务端第一次发送小于设定缓冲区大小时,第二次完全可以发送缓冲区大小数据的。
在异步下做测试
- 关于SOCKET 接收发送 缓冲区 测试 SO_SNDBUF
- windows下修改socket发送缓冲区其实是没用的 setsockopt SOL_SOCKET SO_SNDBUF
- 设置SOCKET的发送与接收缓冲区
- socket的发送与接收缓冲区
- 设置SOCKET的发送与接收缓冲区
- 设置SOCKET的发送与接收缓冲区 .
- tcp socket的发送与接收缓冲区
- tcp socket的发送与接收缓冲区 .
- tcp socket的发送与接收缓冲区
- tcp socket的发送与接收缓冲区
- TCP socket的发送与接收缓冲区
- socket 的发送与接收缓冲区解析
- socket的发送与接收缓冲区
- tcp socket的发送与接收缓冲区
- tcp socket的发送与接收缓冲区
- socket的发送和接收缓冲区
- 设置SOCKET的发送与接收缓冲区
- socket的发送与接收缓冲区
- iOS9微信QQ微博SDK需要在plist加的字段
- javascript 函数详解
- 关于Vim的使用:如何更改默认字体和取消自动备份
- .NET伪静态配置方法(其一)
- 1.2 日期函数
- 关于SOCKET 接收发送 缓冲区 测试 SO_SNDBUF
- 关于程序无法下载的感悟
- Java 内存区域和GC机制以及JVM(Java虚拟机)优化大全和案例实战
- Cocos2d-x从入门到精通第17课《变速动作》
- web.xml中配置JSP属性
- 我的第一篇------测试下
- Struts2 显示日期类型
- protobuf相关的操作函数
- 第二周实践3--体验复杂度(2)汉诺塔