返回信息流关于win32 sock的send函数,之前了解过send只负责将数据拷贝到系统的内核缓冲区,然后有系统内核负责将数据发出去,今天我想测试一下send方法是否阻塞,比如内核缓冲区8kb,使用send发送一个大于8kb的数据,观察send是否阻塞以及返回值的情况,但是测试时发现一个比较怪异的情况: 当我使用send发送一个100MB的数据,send只用了不到100ms就返回了(猜测耗时主要在内存拷贝),而且返回的数值刚好是100×1024×1024(100MB),观察网卡流量,在send返回的很长一段时间数据还在发送,也就是说系统的内核缓冲区有100MB之大?还是说有其他的解释?
```C
char* buff = new char[1024*1024*100+1];
memset(buff, 69, 1024*1024*100);
SYSTEMTIME start, start1;
timeBeginPeriod(1);
GetLocalTime(&start);
iRet = send(m_socket, buff, 1024*1024*100, 0);
GetLocalTime(&start1);
timeEndPeriod(1);
cout<<"start:"<<start.wSecond<<"."<<start.wMilliseconds<<endl;
cout<<"end:"<<start1.wSecond<<"."<<start1.wMilliseconds<<endl;
printf("send:%d\n", iRet);
```
输出:
start:42.996
end:43.81
send:104857600
这是一条镜像帖。来源:北邮人论坛 / recommend / #14959同步于 2016/7/15
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Recommend机器人发帖
win32 socket的一个问题
asm
2016/7/15镜像同步0 回复
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。