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 에 포함할 구조를 지정합니다.
값 | 의미 |
---|---|
|
흐름의 트래픽 유형이 변경됩니다. 버퍼에는 QOS_TRAFFIC_TYPE 상수에 대한 포인터가 포함됩니다. |
|
흐름 속도가 변경됩니다. 버퍼에는 QOS_FLOWRATE_OUTGOING 구조체에 대한 포인터가 포함됩니다. |
|
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를 호출합니다. 몇 가지 가능한 오류 코드는 다음과 같습니다.
반환 코드 | 설명 |
---|---|
|
QoS 하위 시스템은 현재 이 호스트와 대상 호스트 간의 네트워크 경로에서 이 작업을 허용하지 않도록 정책에 의해 구성됩니다. 예를 들어 기본 정책은 qWAVE 실험이 오프 링크 대상으로 실행되지 않도록 방지합니다. |
|
업데이트 흐름 요청이 성공적으로 수신되었습니다. 결과는 겹치는 완료 중에 반환됩니다. |
|
호출 애플리케이션에는 요청된 작업에 대한 충분한 권한이 없습니다. |
|
QOSHandle 매개 변수가 잘못되었습니다. |
|
FlowId 매개 변수가 잘못되었습니다. |
|
요청된 흐름 속성을 이 경로에서 사용할 수 없습니다. |
|
지정된 FlowId 매개 변수를 찾을 수 없습니다. |
|
메모리 할당에 실패했습니다. |
|
수행되는 작업에는 QoS 하위 시스템에 없는 정보가 필요합니다. 이 네트워크에서 이 정보를 가져오는 것은 현재 지원되지 않습니다. 예를 들어 대상 호스트가 오프 링크인 네트워크 경로에서는 대역폭 추정을 가져올 수 없습니다. |
|
작업을 수행할 리소스가 부족합니다. |
|
I/O 디바이스 오류 때문에 요청을 수행할 수 없는 경우 |
|
하드웨어 오류로 인해 표시된 디바이스를 다시 초기화해야 합니다. 애플리케이션은 클린 QOSCreateHandle을 다시 호출해야 합니다. |
|
네트워크 어댑터 하드웨어 오류가 발생했습니다. |
|
네트워크 위치에 연결할 수 없습니다. |
|
현재 쿼리에 응답할 네트워킹 조건에 대한 데이터가 부족합니다. 이는 일반적으로 qWAVE가 네트워크 상태를 확인하기 전에 더 많은 데이터를 대기하기 때문에 주의해야 하는 일시적인 상태입니다. |
|
원격 호스트와의 네트워크 연결이 실패했습니다. |
설명
QOSStartTrackingClient가 아직 호출되지 않은 경우 QOSSetFlow를 호출하면 QOS 하위 시스템이 다음을 수행합니다.
- 엔드 투 엔드 네트워크 경로가 우선 순위를 지원하는지 여부를 검색합니다.
- 네트워크 실험을 통해 엔드 투 엔드 네트워크 특성을 추적합니다. 이러한 실험은 네트워크에 주목할 만한 스트레스를 주지 않습니다.
QOSSetFlow가 ERROR_NETWORK_BUSY 반환하는 경우 지정된 흐름 속도에 대한 대역폭이 부족하고 네트워크 우선 순위를 부여할 수 없습니다. 애플리케이션은 여전히 데이터 스트림을 전송할 수 있지만 흐름은 우선 순위 표시를 받지 않습니다. 대역폭이 부족한 경우 애플리케이션이 요청된 속도로 스트리밍을 시도하지 않는 것이 가장 좋습니다. ERROR_NETWORK_BUSY 반환되는 경우 다음 안전 전략을 사용할 수 있습니다.
- QOSNotifyFlow를 사용하여 QoS 하위 시스템을 쿼리하여 현재 사용 가능한 대역폭을 확인하고 네트워크에서 지원하는 경우 우선 순위가 지정된 낮은 속도로 스트리밍을 시작합니다.
- 원래 원하는 대역폭 양을 사용할 수 있는 경우 QOSNotifyFlow 를 사용하여 알림을 요청합니다. 알림이 수신되면 새 대역폭 요청으로 QOSSetFlow 를 호출하고 지원되는 경우 우선 순위 지정을 사용하여 새 속도로 다시 보냅니다.
이 함수는 필요에 따라 비동기적으로 호출될 수 있습니다.
예제
다음 코드 조각은 애플리케이션에서 QOSSetFlow를 사용하는 방법을 보여 줍니다. 입력 매개 변수 QOSHandle, FlowId, FlowId, QOSSetOutgoingRate 및 sizeof(QoSOutgoingFlowrate)는 이전에 애플리케이션 내의 다른 QoS 함수 및 계산에 의해 초기화되어야 합니다.
매개 변수의 초기화를 보여 주는 다른 QoS 함수 예제에는 QOSCreateHandle, QOSAddSocketToFlow 및 QOSQueryFlow가 있습니다.
전체 샘플 코드 목록은 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 |