WinHttpSetTimeouts 函数 (winhttp.h)

WinHttpSetTimeouts 函数设置与 HTTP 事务相关的超时。

语法

WINHTTPAPI BOOL WinHttpSetTimeouts(
  [in] HINTERNET hInternet,
  [in] int       nResolveTimeout,
  [in] int       nConnectTimeout,
  [in] int       nSendTimeout,
  [in] int       nReceiveTimeout
);

参数

[in] hInternet

WinHttpOpen 或 WinHttpOpenRequest 返回的 HINTERNET

[in] nResolveTimeout

整数类型的值,指定要用于名称解析的超时值(以毫秒为单位)。 如果解析花费的时间长于此超时值,则取消请求。 初始值为零,这意味着没有超时 (无限) 。

Windows Vista 和 Windows XP: 如果使用 NAME_RESOLUTION_TIMEOUT 指定 DNS 超时,则每个请求的开销为一个线程。

[in] nConnectTimeout

整数类型的值,指定要用于服务器连接请求的超时值(以毫秒为单位)。 如果连接请求花费的时间长于此超时值,则会取消该请求。 初始值为 60,000 (60 秒) 。

无论此参数的值如何,在三条腿 SYN/ACK 交换期间设置套接字时,TCP/IP 都可以超时。

[in] nSendTimeout

整数类型的值,指定要用于发送请求的超时值(以毫秒为单位)。 如果发送请求花费的时间长于此超时值,则取消发送。 初始值为 30,000 (30 秒) 。

[in] nReceiveTimeout

整数类型的值,该值指定超时值(以毫秒为单位)以接收对请求的响应。 如果响应花费的时间长于此超时值,则会取消请求。 初始值为 30,000 (30 秒) 。

返回值

如果成功,则返回 TRUE ,否则返回 FALSE 。 有关扩展的错误信息,请调用 GetLastError。 返回的错误代码如下。

错误代码 说明
ERROR_WINHTTP_INCORRECT_HANDLE_STATE
无法执行请求的操作,因为提供的句柄未处于正确的状态。
ERROR_WINHTTP_INCORRECT_HANDLE_TYPE
为此操作提供的句柄类型不正确。
ERROR_WINHTTP_INTERNAL_ERROR
发生了内部错误。
ERROR_NOT_ENOUGH_MEMORY
内存不足,无法完成请求的操作。 (Windows 错误代码)
ERROR_INVALID_PARAMETER
一个或多个超时参数具有除 -1 以外的负值。

注解

即使在异步模式下使用 WinHTTP (即在 WinHttpOpen) 中设置了WINHTTP_FLAG_ASYNC时,此函数也会同步运行。 返回值指示成功或失败。 要获得更多的错误信息,请调用 GetLastError。

如果值为 0 或 -1,则超时设置为无限等待。 大于 0 的值设置超时值(以毫秒为单位)。 例如,30,000 会将超时设置为 30 秒。 除 -1 以外的所有负值都会导致函数失败并ERROR_INVALID_PARAMETER。

重要 如果使用 WinHttpSetOptionWINHTTP_OPTION_RECEIVE_TIMEOUT 设置较小的超时,则它可以替代使用 dwReceiveTimeout 参数设置的值,从而导致响应提前终止。 若要避免这种情况,请勿使用 WINHTTP_OPTION_RECEIVE_TIMEOUT 选项设置小于使用 dwReceiveTimeout 设置的值的超时。
 
注意 对于 Windows XP 和 Windows 2000,请参阅 WinHTTP 起始页的 运行时要求 部分。
 

示例

此示例演示如何使用 WinHttpSetTimeout 设置新的超时值。

    // Use WinHttpOpen to obtain an HINTERNET handle.
    HINTERNET hSession = WinHttpOpen(L"A WinHTTP Example Program/1.0", 
                                    WINHTTP_ACCESS_TYPE_DEFAULT_PROXY,
                                    WINHTTP_NO_PROXY_NAME, 
                                    WINHTTP_NO_PROXY_BYPASS, 0);
    if (hSession)
    {
        // Use WinHttpSetTimeouts to set a new time-out values.
        if (!WinHttpSetTimeouts( hSession, 10000, 10000, 10000, 10000))
            printf( "Error %u in WinHttpSetTimeouts.\n", GetLastError());
              
        // PLACE ADDITIONAL CODE HERE.
    
        // When finished, release the HINTERNET handle.
        WinHttpCloseHandle(hSession);
    }
    else
    {
        printf("Error %u in WinHttpOpen.\n", GetLastError());
    }

要求

要求
最低受支持的客户端 Windows XP、Windows 2000 Professional 和 SP3 [仅限桌面应用]
最低受支持的服务器 Windows Server 2003、Windows 2000 Server SP3 [仅限桌面应用]
目标平台 Windows
标头 winhttp.h
Library Winhttp.lib
DLL Winhttp.dll
可再发行组件 Windows XP 和 Windows 2000 上的 WinHTTP 5.0 和 Internet Explorer 5.01 或更高版本。

另请参阅

关于 Microsoft Windows HTTP Services (WinHTTP)

WinHTTP 版本

WinHttpCloseHandle

WinHttpConnect

WinHttpOpen

WinHttpOpenRequest