wininet中HttpSendRequest函数一直返回ERROR_IO_PENDING

djianq0417 2012-06-23 01:12:08
如题,部分代码如下:

if (FALSE == ::HttpSendRequest(m_req, NULL, 0, NULL, 0)) {
if (ERROR_IO_PENDING != ::GetLastError()) {
u_log_error("http_downloader: HttpSendRequest failed: err = %d", ::GetLastError());
return;
}
if (WAIT_OBJECT_0 != ::WaitForSingleObject(m_ev_sdr, m_tout)) { //INFINITE m_tout
memset(&overlap, 0, sizeof(overlap));
rc = ::GetOverlappedResult(m_ev_sdr, &overlap, &numread, FALSE);
u_log_error("http_downloader: HttpSendRequest wait event failed: err = %d, rc = %d", ::GetLastError(), rc);
return;
}
if (m_exit)
return;
}


一直都是返回ERROR_IO_PENDING,然后超时失败,是什么原因?
...全文
158 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq120848369 2012-06-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

引用 1 楼 的回复:

如果操作成功,这两个函数都返回TRUE。需要注意的是,当ReadFile和WriteFile返回FALSE时,不一定就是操作失败,线程应该调用GetLastError函数分析返回的结果。例如,在重叠操作时如果操作还未完成函数就返回,那么函数就返回FALSE,而且GetLastError函数返回ERROR_IO_PENDING。这说明重叠操作还未完成。

这是正……
[/Quote]

不清楚, 网卡出口满了容易出现这个错误, 不是WINDOWS程序员, 你还是去VC区之类的问问.
djianq0417 2012-06-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

如果操作成功,这两个函数都返回TRUE。需要注意的是,当ReadFile和WriteFile返回FALSE时,不一定就是操作失败,线程应该调用GetLastError函数分析返回的结果。例如,在重叠操作时如果操作还未完成函数就返回,那么函数就返回FALSE,而且GetLastError函数返回ERROR_IO_PENDING。这说明重叠操作还未完成。

这是正常返回值。
[/Quote]
但是如果总是返回这个ERROR_IO_PENDING可能就有问题了吧,程序只是在某些机器上会出现ERROR_IO_PENDING,而一般的机器上却是返回true
qq120848369 2012-06-23
  • 打赏
  • 举报
回复
It often means that an overlapped write or read operation has not completed. It is usually not an error per se when you are using asynchronous reads and writes of files (or in my case serial ports). It simply means that the WriteFile or ReadFile has been called and the operation returns without finishing the task. That is what you want; the task goes on in the background while you do something else. When the operation is completed a WaitOnXXXEvent() type function is called and then you do whatever needs to be done.
qq120848369 2012-06-23
  • 打赏
  • 举报
回复
如果操作成功,这两个函数都返回TRUE。需要注意的是,当ReadFile和WriteFile返回FALSE时,不一定就是操作失败,线程应该调用GetLastError函数分析返回的结果。例如,在重叠操作时如果操作还未完成函数就返回,那么函数就返回FALSE,而且GetLastError函数返回ERROR_IO_PENDING。这说明重叠操作还未完成。

这是正常返回值。

64,662

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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