c++ - 如何配置 HttpEndRequest 的超时?

标签 c++ winapi timeout

背景:我正在维护一个旧的 C++ 应用程序,它与我公司的服务器进行通信。公司中没有人(包括我)对 C++ 或正在使用的许多其他技术有任何丰富的经验。

问题:我正在尝试上传一个包含如下代码的文件:

if(HttpSendRequestEx(hReq, &InBuf, NULL, HSR_INITIATE, 0))
{
    unsigned long ulWrote;
    BOOL bWrote;
    bWrote = InternetWriteFile(hReq, postData, postDataLength, &ulWrote);

    if(bWrote)
    {
        if(!HttpEndRequest(hReq, NULL, 0, 0))
        {
            DWORD errorCode = GetLastError(); // 12002 - timeout
        }
    }
}

这里还有很多其他错误处理,但我已将其精简到我发现问题的地方。

小文件上传不会出现问题,较大文件 (~25MB) 会遇到超时。即使发生超时,很多时候文件也会上传成功,所以我不认为这是服务器端的问题。仅仅抑制或忽略错误似乎是错误的,但我还没有找到任何方法将超时设置为更合理的水平。

最佳答案

WININET 提供 InternetSetOption()control它的行为,在你的情况下看看 INTERNET_OPTION_SEND_TIMEOUT标志。

关于c++ - 如何配置 HttpEndRequest 的超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22308720/

相关文章:

c++ - std::tuple_cat 替换失败

c# - 浮点 Div/Mul > 比 Add/Sub 慢 30 倍?

java - C++中接口(interface)的匿名实现

c++ - DLL 共享数据的推荐方式是什么?

iphone - NSData datawithcontentsofurl有没有超时时间?

javascript - 如果 jQuery.ajax 等待响应时间足够长则运行函数

c++ - Objective-C 集成 C 库并传递字符串值 - ARC 错误

c - 不正确地使用 InterlockedCompareExchange 以原子方式复制值?

c - I/O 完成端口中的 select() 等价

eclipse - Tomcat 没有在 eclipse 上启动