IWinHttpRequest::SetTimeouts 메서드

SetTimeouts 메서드는 송신/수신 작업의 개별 제한 시간 구성 요소를 밀리초 단위로 지정합니다.

구문

HRESULT SetTimeouts(
  [in] long ResolveTimeout,
  [in] long ConnectTimeout,
  [in] long SendTimeout,
  [in] long ReceiveTimeout
);

매개 변수

ResolveTimeout [in]

호스트 이름(예: www.microsoft.com)을 IP 주소(예: 192.168.131.199)로 확인할 때 적용되는 시간 제한 값(밀리초)입니다. 기본값은 0입니다. 즉, 제한 시간(무한)이 없습니다. NAME_RESOLUTION_TIMEOUT 사용하여 DNS 시간 제한을 지정하면 요청당 하나의 스레드 오버헤드가 발생합니다.

ConnectTimeout [in]

대상 서버와의 통신 소켓을 설정할 때 적용되는 시간 제한 값(밀리초)입니다. 기본값은 60000 (60 초)입니다.

SendTimeout [in]

통신 소켓의 개별 요청 데이터 패킷을 대상 서버로 보낼 때 적용되는 시간 제한 값(밀리초)입니다. HTTP 서버로 전송되는 대규모 요청은 일반적으로 여러 패킷으로 나뉩니다. 보내기 제한 시간은 각 패킷을 개별적으로 보내는 데 적용됩니다. 기본값은 30,000(30초)입니다.

ReceiveTimeout [in]

대상 서버에서 응답 데이터 패킷을 받을 때 적용되는 시간 제한 값(밀리초)입니다. 큰 응답은 여러 패킷으로 나뉩니다. 수신 시간 제한은 소켓에서 각 데이터 패킷을 가져오는 데 적용됩니다. 기본값은 30,000(30초)입니다.

반환 값

반환 값은 성공에 S_OK 오류 값이 아닌 경우입니다.

설명

모든 매개 변수는 필수입니다. 값이 0 또는 -1이면 시간 제한이 무한히 대기하도록 설정됩니다. 0보다 큰 값은 시간 제한 값을 밀리초 단위로 설정합니다. 예를 들어 30,000은 제한 시간을 30초로 설정합니다. -1 이외의 모든 음수 값으로 인해 이 메서드가 실패합니다.

제한 시간 값은 Winsock 계층에 적용됩니다.

참고

Windows XP 및 Windows 2000의 경우 WinHttp 시작 페이지의 런타임 요구 사항 섹션을 참조하세요.

예제

다음 예제에서는 모든 WinHTTP 제한 시간을 30초로 설정하고, HTTP 연결을 열고, HTTP 요청을 보내고, 응답 텍스트를 읽는 방법을 보여 줍니다.

#include <windows.h>
#include <stdio.h>
#include <objbase.h>

#include "httprequest.h"

#pragma comment(lib, "ole32.lib")
#pragma comment(lib, "oleaut32.lib")

// IID for IWinHttpRequest.
const IID IID_IWinHttpRequest =
{
  0x06f29373,
  0x5c5a,
  0x4b54,
  {0xb0, 0x25, 0x6e, 0xf1, 0xbf, 0x8a, 0xbf, 0x0e}
};

int main()
{
    // variable for return value
    HRESULT    hr;

    // initialize COM
    hr = CoInitialize( NULL );

    IWinHttpRequest *  pIWinHttpRequest = NULL;

    BSTR            bstrResponse = NULL;
    VARIANT         varFalse;
    VARIANT         varEmpty;

    CLSID           clsid;

    VariantInit(&varFalse);
    V_VT(&varFalse)   = VT_BOOL;
    V_BOOL(&varFalse) = VARIANT_FALSE;

    VariantInit(&varEmpty);
    V_VT(&varEmpty) = VT_ERROR;

    hr = CLSIDFromProgID(L"WinHttp.WinHttpRequest.5.1", &clsid);

    if (SUCCEEDED(hr))
    {
        hr = CoCreateInstance(clsid, NULL,
                              CLSCTX_INPROC_SERVER,
                              IID_IWinHttpRequest,
                              (void **)&pIWinHttpRequest);
    }

    if (SUCCEEDED(hr))
    {    // Set Time-outs.
        hr = pIWinHttpRequest->SetTimeouts(30000, 30000,
                                           30000, 30000);
    }
    if (SUCCEEDED(hr))
    {    // Open WinHttpRequest.
        BSTR bstrMethod  = SysAllocString(L"GET");
        BSTR bstrUrl = SysAllocString(L"https://microsoft.com");
        hr = pIWinHttpRequest->Open(bstrMethod,
                                    bstrUrl,
                                    varFalse);
        SysFreeString(bstrMethod);
        SysFreeString(bstrUrl);
    }
    if (SUCCEEDED(hr))
    {    // Send Request.
        hr = pIWinHttpRequest->Send(varEmpty);
    }
    if (SUCCEEDED(hr))
    {    // Get Response text.
        hr = pIWinHttpRequest->GetAllResponseHeaders(&bstrResponse);
    }
    if (SUCCEEDED(hr))
    {    // Print response to console.
        wprintf(L"%.256s",bstrResponse);
    }

    // Release memory.
    if (pIWinHttpRequest)
        pIWinHttpRequest->Release();
    if (bstrResponse)
        SysFreeString(bstrResponse);

    CoUninitialize();
    return 0;
}

다음 스크립팅 예제에서는 모든 WinHTTP 제한 시간을 30초로 설정하고, HTTP 연결을 열고, HTTP 요청을 보내는 방법을 보여 줍니다.

// Instantiate a WinHttpRequest object.
var WinHttpReq = new ActiveXObject("WinHttp.WinHttpRequest.5.1");

// Set time-outs. If time-outs are set, they must 
// be set before open.
WinHttpReq.SetTimeouts(30000, 30000, 30000, 30000);

// Initialize an HTTP request.  
WinHttpReq.Open("GET", "https://www.microsoft.com", false);

// Send the HTTP request.
WinHttpReq.Send();

요구 사항

요구 사항
지원되는 최소 클라이언트
Windows XP, Windows 2000 Professional SP3 [데스크톱 앱만 해당]
지원되는 최소 서버
Windows Server 2003, Windows 2000 Server SP3 [데스크톱 앱만 해당]
재배포 가능 파일
Windows XP 및 Windows 2000에서 WinHTTP 5.0 및 인터넷 Explorer 5.01 이상.
IDL
HttpRequest.idl
라이브러리
Winhttp.lib
DLL
Winhttp.dll

추가 정보

IWinHttpRequest

WinHttpRequest

WinHTTP 버전