recv函数阻塞的相关问题

ahjkwangjincai 2014-08-06 12:13:22
int nLen = recv(m_SOCKET, buf, 102400, 0);

这样的阻塞,如果服务器端要向我发送数据,假设我的网速又超级无敌卡,可服务端要向我发送90000字节数据,那我的recv是一直阻塞到全部接收了90000字节数据才返回,还是先返回已经接收到的数据?
...全文
255 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
SiGoYi 2014-08-07
  • 打赏
  • 举报
回复
引用 3 楼 ahjkwangjincai 的回复:
[quote=引用 1 楼 VisualEleven 的回复:] 最准确的是检查你recv函数的返回值是多少~
关键是我没法模拟我假设的这些条件[/quote] 数据缓冲区大小是可以设置的,recv收到的数据就是缓冲区能容纳的数据量。
wuleeemail 2014-08-07
  • 打赏
  • 举报
回复
先返回已经接收到的数据。对于这个int nLen = recv(m_SOCKET, buf, 102400, 0);标准接收函数是根据你的系统、网络环境的好坏来决定这个nLen值的,如果网络环境不好这个nLen值不会到90000的,那时它也返回,那么对于你接收来说就会丢数据。
dvlinker 2014-08-06
  • 打赏
  • 举报
回复
应该是检查接收到的数据长度,可能要多次接收才能接受完成,一直接受完成为止
ahjkwangjincai 2014-08-06
  • 打赏
  • 举报
回复
引用 2 楼 lx624909677 的回复:
可以用异步socket来做,比如重叠I/O或者完成端口
我想实现的是浏览器底层的数据接收处理,总是有失败的情况,就是搞不懂原因
ahjkwangjincai 2014-08-06
  • 打赏
  • 举报
回复
引用 1 楼 VisualEleven 的回复:
最准确的是检查你recv函数的返回值是多少~
关键是我没法模拟我假设的这些条件
lx624909677 2014-08-06
  • 打赏
  • 举报
回复
可以用异步socket来做,比如重叠I/O或者完成端口
Eleven 2014-08-06
  • 打赏
  • 举报
回复
最准确的是检查你recv函数的返回值是多少~

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧