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

名前解決に使用するタイムアウト値をミリ秒単位で指定する整数型の値。 解決にこのタイムアウト値より長い時間がかかる場合、要求は取り消されます。 初期値は 0 で、タイムアウト (無限) がないことを意味します。

Windows Vista および Windows XP: NAME_RESOLUTION_TIMEOUTを使用して DNS タイムアウトが指定されている場合は、要求ごとに 1 つのスレッドのオーバーヘッドがあります。

[in] nConnectTimeout

サーバー接続要求に使用するタイムアウト値をミリ秒単位で指定する整数型の値。 接続要求にこのタイムアウト値より長い時間がかかる場合、要求は取り消されます。 初期値は 60,000 (60 秒) です。

TCP/IP は、このパラメーターの値に関係なく、3 つの脚の SYN/ACK 交換中にソケットの設定中にタイムアウトになる可能性があります。

[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 つ以上のタイムアウト パラメーターに-1 以外の負の値があります。

注釈

WinHTTP が非同期モードで使用されている場合 (つまり、WinHttpOpenWINHTTP_FLAG_ASYNCが設定されている場合) でも、この関数は同期的に動作します。 戻り値は成功または失敗を示します。 詳細なエラー情報を得るには、GetLastError を呼び出します。

値が 0 または -1 の場合、タイムアウトが無限に待機するように設定されます。 0 より大きい値は、タイムアウト値をミリ秒単位で設定します。 たとえば、30,000 の場合、タイムアウトは 30 秒に設定されます。 -1 以外のすべての負の値を指定すると、関数は ERROR_INVALID_PARAMETERで失敗します。

大事なWinHttpSetOptionWINHTTP_OPTION_RECEIVE_TIMEOUT を使用して小さなタイムアウトが設定されている場合は、dwReceiveTimeout パラメーターで設定された値をオーバーライドして、応答が予想よりも早く終了する可能性があります。 これを回避するには、dwReceiveTimeout を使用して設定された値よりも小さいWINHTTP_OPTION_RECEIVE_TIMEOUT オプションでタイムアウトを設定しないでください。
 
メモ Windows XP と Windows 2000 については、WinHTTP スタート ページの 「ランタイム要件 」セクションを参照してください。
 

この例では、 WinHttpSetTimeouts を使用して新しいタイムアウト値を設定する方法を示します。

    // 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 およびインターネット エクスプローラー 5.01 以降がインストールされています。

こちらもご覧ください

Microsoft Windows HTTP Services (WinHTTP) について

WinHTTP バージョン

WinHttpCloseHandle

WinHttpConnect

WinHttpOpen

WinHttpOpenRequest