다음을 통해 공유


QOSSetFlow 함수(qos2.h)

QOSSetFlow 함수는 애플리케이션에서 호출하여 QOS 하위 시스템에 애플리케이션 패킷의 우선 순위를 지정하고 흐름 트래픽을 변경하도록 요청합니다. 이 함수는 또한 흐름 변경을 QoS 하위 시스템에 알리는 데 사용됩니다. 예를 들어 네트워크 정체를 고려하기 위해 흐름 속도가 변경되거나 QoS 우선 순위 값이 단일 영구 소켓 연결을 통해 다양한 형식의 콘텐츠를 전송하거나 스트리밍하기 위해 조정이 필요한 경우입니다.

구문

ExternC BOOL QOSSetFlow(
  [in]            HANDLE       QOSHandle,
  [in]            QOS_FLOWID   FlowId,
  [in]            QOS_SET_FLOW Operation,
  [in]            ULONG        Size,
  [in]            PVOID        Buffer,
                  DWORD        Flags,
  [out, optional] LPOVERLAPPED Overlapped
);

매개 변수

[in] QOSHandle

QOSCreateHandle에서 반환된 QOS 하위 시스템에 대한 핸들입니다.

[in] FlowId

흐름 식별자입니다. QOS_FLOWID 부호 없는 32비트 정수입니다.

[in] Operation

흐름에서 변경될 내용을 식별하는 QOS_SET_FLOW 열거형 형식입니다. 이 매개 변수는 Buffer 에 포함할 구조를 지정합니다.

의미
QOSSetTrafficType
0
흐름의 트래픽 유형이 변경됩니다. 버퍼에는 QOS_TRAFFIC_TYPE 상수에 대한 포인터가 포함됩니다.
QOSSetOutgoingRate
1
흐름 속도가 변경됩니다. 버퍼에는 QOS_FLOWRATE_OUTGOING 구조체에 대한 포인터가 포함됩니다.
QOSSetOutgoingDSCPValue
2
Windows 7, Windows Server 2008 R2 이상: 나가는 DSCP 값이 변경됩니다. 버퍼에는 임의의 DSCP 값을 정의하는 DWORD 값에 대한 포인터가 포함됩니다.
참고 이 설정을 사용하려면 호출 애플리케이션이 관리자 또는 네트워크 구성 연산자 그룹의 구성원이어야 합니다.
 

[in] Size

Buffer 매개 변수의 크기(바이트)입니다.

[in] Buffer

Operation 매개 변수 값으로 지정된 구조체에 대한 포인터입니다.

Flags

다음에 사용하도록 예약됩니다. 이 매개 변수는 0으로 설정해야 합니다.

[out, optional] Overlapped

비동기 출력에 사용되는 OVERLAPPED 구조체에 대한 포인터입니다. 이 함수가 비동기적으로 호출되지 않는 경우 NULL 로 설정해야 합니다.

반환 값

함수가 성공하면 반환 값이 0이 아닙니다.

함수가 실패하면 반환 값은 0입니다. 확장 오류 정보를 가져오려면 GetLastError를 호출합니다. 몇 가지 가능한 오류 코드는 다음과 같습니다.

반환 코드 설명
ERROR_ACCESS_DISABLED_BY_POLICY
QoS 하위 시스템은 현재 이 호스트와 대상 호스트 간의 네트워크 경로에서 이 작업을 허용하지 않도록 정책에 의해 구성됩니다. 예를 들어 기본 정책은 qWAVE 실험이 오프 링크 대상으로 실행되지 않도록 방지합니다.
ERROR_IO_PENDING
업데이트 흐름 요청이 성공적으로 수신되었습니다. 결과는 겹치는 완료 중에 반환됩니다.
ERROR_ACCESS_DENIED
호출 애플리케이션에는 요청된 작업에 대한 충분한 권한이 없습니다.
ERROR_INVALID_HANDLE
QOSHandle 매개 변수가 잘못되었습니다.
ERROR_INVALID_PARAMETER
FlowId 매개 변수가 잘못되었습니다.
ERROR_NETWORK_BUSY
요청된 흐름 속성을 이 경로에서 사용할 수 없습니다.
ERROR_NOT_FOUND
지정된 FlowId 매개 변수를 찾을 수 없습니다.
ERROR_NOT_ENOUGH_MEMORY
메모리 할당에 실패했습니다.
ERROR_NOT_SUPPORTED
수행되는 작업에는 QoS 하위 시스템에 없는 정보가 필요합니다. 이 네트워크에서 이 정보를 가져오는 것은 현재 지원되지 않습니다. 예를 들어 대상 호스트가 오프 링크인 네트워크 경로에서는 대역폭 추정을 가져올 수 없습니다.
ERROR_NO_SYSTEM_RESOURCES
작업을 수행할 리소스가 부족합니다.
ERROR_IO_DEVICE
I/O 디바이스 오류 때문에 요청을 수행할 수 없는 경우
ERROR_DEVICE_REINITIALIZATION_NEEDED
하드웨어 오류로 인해 표시된 디바이스를 다시 초기화해야 합니다. 애플리케이션은 클린 QOSCreateHandle을 다시 호출해야 합니다.
ERROR_ADAP_HDW_ERR
네트워크 어댑터 하드웨어 오류가 발생했습니다.
ERROR_HOST_UNREACHABLE
네트워크 위치에 연결할 수 없습니다.
ERROR_RETRY
현재 쿼리에 응답할 네트워킹 조건에 대한 데이터가 부족합니다. 이는 일반적으로 qWAVE가 네트워크 상태를 확인하기 전에 더 많은 데이터를 대기하기 때문에 주의해야 하는 일시적인 상태입니다.
ERROR_UNEXP_NET_ERR
원격 호스트와의 네트워크 연결이 실패했습니다.

설명

QOSStartTrackingClient가 아직 호출되지 않은 경우 QOSSetFlow를 호출하면 QOS 하위 시스템이 다음을 수행합니다.

  • 엔드 투 엔드 네트워크 경로가 우선 순위를 지원하는지 여부를 검색합니다.
  • 네트워크 실험을 통해 엔드 투 엔드 네트워크 특성을 추적합니다. 이러한 실험은 네트워크에 주목할 만한 스트레스를 주지 않습니다.

QOSSetFlowERROR_NETWORK_BUSY 반환하는 경우 지정된 흐름 속도에 대한 대역폭이 부족하고 네트워크 우선 순위를 부여할 수 없습니다. 애플리케이션은 여전히 데이터 스트림을 전송할 수 있지만 흐름은 우선 순위 표시를 받지 않습니다. 대역폭이 부족한 경우 애플리케이션이 요청된 속도로 스트리밍을 시도하지 않는 것이 가장 좋습니다. ERROR_NETWORK_BUSY 반환되는 경우 다음 안전 전략을 사용할 수 있습니다.

  1. QOSNotifyFlow를 사용하여 QoS 하위 시스템을 쿼리하여 현재 사용 가능한 대역폭을 확인하고 네트워크에서 지원하는 경우 우선 순위가 지정된 낮은 속도로 스트리밍을 시작합니다.
  2. 원래 원하는 대역폭 양을 사용할 수 있는 경우 QOSNotifyFlow 를 사용하여 알림을 요청합니다. 알림이 수신되면 새 대역폭 요청으로 QOSSetFlow 를 호출하고 지원되는 경우 우선 순위 지정을 사용하여 새 속도로 다시 보냅니다.

이 함수는 필요에 따라 비동기적으로 호출될 수 있습니다.

예제

다음 코드 조각은 애플리케이션에서 QOSSetFlow를 사용하는 방법을 보여 줍니다. 입력 매개 변수 QOSHandle, FlowId, FlowId, QOSSetOutgoingRatesizeof(QoSOutgoingFlowrate)는 이전에 애플리케이션 내의 다른 QoS 함수 및 계산에 의해 초기화되어야 합니다.

매개 변수의 초기화를 보여 주는 다른 QoS 함수 예제에는 QOSCreateHandle, QOSAddSocketToFlowQOSQueryFlow가 있습니다.

전체 샘플 코드 목록은 Windows SDK를 참조하세요. SDK 폴더: Samples\NetDs\GQos\Qos2

if( QOSSetFlow( QOSHandle,
        FlowId,
        QOSSetOutgoingRate,           // Operation 
        sizeof(QoSOutgoingFlowrate),  // Size
        &QoSOutgoingFlowrate,         // Buffer
        0,                            // Flags (Must be set to 0 with QoS Version 1.0)
        NULL)                         // Overlapped
        == 0 )
{
    if( ERROR_INVALID_PARAMETER == GetLastError())
    {
        std::cerr << __FILE__ <<" Line: " << __LINE__ ;
        std::cerr << " - QOSSetFlow failed. Exception code: "; 
        std::cerr << GetLastError() << " - Invalid parameter"; 
        std::cerr << std::endl;
    }
    else
    {
        std::cerr << __FILE__ <<" Line: " << __LINE__ ;
        std::cerr << " - QOSSetFlow failed. Exception code: "; 
        std::cerr << GetLastError() << std::endl;
    }
    
}
else
{
    std::cout << "QOSSetFlow set outgoing flowrate bandwidth to "; 
    std::cout << QoSOutgoingFlowrate.Bandwidth;
    std::cerr << std::endl;
}


요구 사항

   
지원되는 최소 클라이언트 Windows Vista [데스크톱 앱만 해당]
지원되는 최소 서버 Windows Server 2008 [데스크톱 앱만 해당]
대상 플랫폼 Windows
헤더 qos2.h(Qos2.h 포함)
라이브러리 Qwave.lib
DLL Qwave.dll

추가 정보

품질 Windows 오디오/비디오 환경(qWAVE)