recv阻塞问题--困扰我很久了

RLib 2011-10-05 04:39:14
【目的】
封装成HttpRequest/HttpResponse类

【问题】
HttpResponse类涉及的recv函数在某些情况下会阻塞很长时间(补充: 可能因为目标网站服务器处理方式不同, 所以有些网站是没有这种问题的)

【详细描述】
首次调用recv可以正常得到服务器的HTTP响应, 因数据大小未知, 无法判断是否完整故需要循环调用recv接收.
可是问题来了, 怎么判断数据全部收完了呢? 读取Content-Length等的方法肯定是不行的, 有些服务器根本没传, IIS还直接为0了.
一旦数据收完了(调用了大于等于1次的recv), 再次去recv的时候(我们不知道数据收完没有, 所以还在循环)有些网站却不会返回(期望值是0, 表示收完了)于是就出现上面的阻塞问题.很纳闷啊.......

【分析】
肯定是我的处理有问题.
因为无论是什么浏览器还是微软的HttpRequest类都不会出现这类阻塞问题.
不知道他们是怎么处理的?
望指教。。。
谢之.
...全文
436 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
RLib 2012-01-17
  • 打赏
  • 举报
回复
解决方法最好是先检查Content-Length,如果没有再用定时器
RLib 2011-10-05
  • 打赏
  • 举报
回复
设置超时的方法对速度肯定有影响,可是浏览器基本是秒,根本没有延迟。
RLib 2011-10-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 liubaofeng28 的回复:]
http://www.yueya28.com/home.php?mod=space&uid=2&do=blog&quickforward=1&id=23
这个连接应该能解决你的阻塞socket得不到返回值的问题。
[/Quote]

谢谢

只是在网络情况不好的时候此方法很受限,所以想来问问标准方法是怎样处理的。
freefei 2011-10-05
  • 打赏
  • 举报
回复
http://www.yueya28.com/home.php?mod=space&uid=2&do=blog&quickforward=1&id=23
这个连接应该能解决你的阻塞socket得不到返回值的问题。
freefei 2011-10-05
  • 打赏
  • 举报
回复
定时器

18,356

社区成员

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

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