【问题标题】:How do I configure the timeout on HttpEndRequest?如何配置 HttpEndRequest 的超时时间?
【发布时间】:2014-04-14 01:28:00
【问题描述】:

背景:我正在维护一个与我公司的服务器通信的旧 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) 会遇到超时。即使发生超时,很多时候文件都会成功上传,所以我认为这不是服务器端的问题。只是抑制或忽略错误似乎是错误的,但我还没有找到任何方法将超时设置为更合理的水平。

【问题讨论】:

    标签: c++ winapi timeout


    【解决方案1】:

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

    【讨论】:

    • 我尝试将 INTERNET_OPTION_SEND_TIMEOUT、INTERNET_OPTION_CONNECT_TIMEOUT 和 INTERNET_OPTION_DATA_SEND_TIMEOUT 都设置为 2 分钟。我仍然在 30 秒时超时。 InternetQueryOption 验证值设置正确。
    猜你喜欢
    • 2013-06-22
    • 1970-01-01
    • 2013-06-11
    • 1970-01-01
    • 2015-08-06
    • 1970-01-01
    • 1970-01-01
    • 2016-01-16
    相关资源
    最近更新 更多