QOSAddSocketToFlow 함수(qos2.h)
QOSAddSocketToFlow 함수는 트래픽에 대한 새 흐름을 추가합니다.
구문
ExternC BOOL QOSAddSocketToFlow(
[in] HANDLE QOSHandle,
[in] SOCKET Socket,
[in, optional] PSOCKADDR DestAddr,
[in] QOS_TRAFFIC_TYPE TrafficType,
[in, optional] DWORD Flags,
[in, out] PQOS_FLOWID FlowId
);
매개 변수
[in] QOSHandle
QOSCreateHandle에서 반환된 QOS 하위 시스템에 대한 핸들입니다.
[in] Socket
애플리케이션이 트래픽을 흐르는 데 사용할 소켓을 식별합니다.
[in, optional] DestAddr
애플리케이션이 트래픽을 보낼 대상 IP 주소를 포함하는 sockaddr 구조체에 대한 포인터입니다. sockaddr 구조체는 대상 포트를 지정해야 합니다.
소켓이 연결되지 않은 경우 이 매개 변수를 지정해야 합니다. 소켓이 이미 연결된 경우 이 매개 변수를 지정할 필요가 없습니다. 이 경우 매개 변수가 여전히 지정된 경우 대상 호스트 및 포트는 소켓 연결 호출 중에 지정된 것과 일치해야 합니다.
TCP에서 소켓 연결 호출이 지연될 수 있으므로 연결이 설정되기 전에 QOSAddSocketToFlow 를 호출하여 DestAddr 매개 변수에서 원격 시스템의 IP 주소 및 포트 번호를 전달할 수 있습니다.
[in] TrafficType
이 흐름이 사용될 트래픽 유형을 지정하는 QOS_TRAFFIC_TYPE 상수입니다.
[in, optional] Flags
선택적 플래그 값입니다.
값 | 의미 |
---|---|
|
지정된 경우 QoS 하위 시스템은 이 흐름의 네트워크 경로에 대한 데이터를 수집하지 않습니다. 따라서 대역폭 추정 기술을 사용하는 함수는 사용할 수 없습니다. 예를 들어 작업 값이 QOSNotifyCongested, QOSNotifyUncongested 및 QOSNotifyAvailable인 작업 값이QOSQueryFlowFundamentals 및 QOSNotifyFlow인 QOSQueryFlow를 차단합니다. |
[in, out] FlowId
흐름 식별자를 수신하는 버퍼에 대한 포인터입니다. 입력에서 이 값은 0이어야 합니다. 출력에서 호출이 성공하면 버퍼에 흐름 식별자가 포함됩니다.
소켓이 기존 흐름에 추가되는 경우 이 매개 변수는 해당 흐름의 식별자가 됩니다.
사용된 여러 소켓이 동일한 QoS 흐름 속성을 공유할 수 있는 경우 애플리케이션에서 이 매개 변수를 사용할 수 있습니다. 그런 다음 QoS 하위 시스템은 동일한 속성을 가진 후속 소켓에 대한 새 흐름을 프로비전하는 오버헤드를 발생시키지 않아도 됩니다. 적응형이 아닌 흐름만 기존 흐름에 연결된 여러 소켓을 가질 수 있습니다.
QOS_FLOWID 부호 없는 32비트 정수입니다.
반환 값
함수가 성공하면 반환 값이 0이 아닙니다.
함수가 실패하면 반환 값은 0입니다. 확장 오류 정보를 가져오려면 GetLastError를 호출합니다. 몇 가지 가능한 오류 코드는 다음과 같습니다.
반환 코드 | 설명 |
---|---|
|
원격 시스템에서 네트워크 연결을 거부했습니다. |
|
QOSHandle 매개 변수가 잘못되었습니다. |
|
FlowId 매개 변수가 잘못되었습니다.
참고 이 값은 DestAddr 매개 변수를 통해 IPv4/v6 혼합 주소를 제공한 경우에도 반환됩니다.
|
|
메모리 할당에 실패했습니다. |
|
작업을 수행할 리소스가 부족합니다. |
|
I/O 디바이스 오류 때문에 요청을 수행할 수 없는 경우 |
|
하드웨어 오류로 인해 표시된 디바이스를 다시 초기화해야 합니다. 애플리케이션은 클린 QOSCreateHandle을 다시 호출해야 합니다. |
|
요청이 지원되지 않습니다. |
|
네트워크 어댑터 하드웨어 오류가 발생했습니다. |
|
네트워크 위치에 연결할 수 없습니다. |
설명
iPv4/v6 혼합 주소의 사용은 qWAVE에서 지원되지 않습니다. DestAddr 매개 변수로 지정된 주소는 IPv4 또는 IPv6이어야 합니다.
특정 네트워크 인터페이스를 통해 네트워크 실험에 대한 요구 사항이 있는 경우 소켓은 해당 특정 인터페이스에 바인딩되어야 합니다. 그렇지 않으면 네트워크 스택에 표시된 것처럼 실험에 가장 적합한 인터페이스가 qWAVE 하위 시스템에 의해 할당됩니다.
이 흐름과 연결된 네트워크 트래픽은 이 호출만으로는 영향을 받지 않습니다. 예를 들어 패킷 우선 순위 지정은 즉시 발생하지 않습니다.
이 함수를 사용하는 애플리케이션에는 적응형 및 비 적응형이라는 두 가지 범주가 있습니다. 적응형 애플리케이션은 혼잡과 같은 네트워크 변경에 적응하기 위해 QOS_FLOW_FUNDAMENTALS 구조의 알림 및 정보를 사용합니다. qWAVE 서비스는 대상 디바이스에 있을 수 있는 적응형 흐름에 LLTD(링크 계층 토폴로지 검색) QoS 확장을 사용합니다.
이 함수 적응형 A/V 애플리케이션을 호출한 후 네트워크 트래픽에 영향을 주려면 QOSSetFlowRate 의 작업 값을 사용하여 QOSSetFlow 함수를 호출해야 합니다.
적응형이 아닌 애플리케이션은 변화하는 네트워크 특성에 적응하지 않거나 ERROR_NOT_SUPPORTED 표시된 대로 적응 기능을 지원하지 않는 엔드포인트로 트래픽을 보내고 있습니다.
비 적응형 애플리케이션 또는 적응형이 아닌 흐름을 만드는 적응형 애플리케이션은 QOS_NON_ADAPTIVE_FLOW 플래그를 사용하여 이 함수를 호출해야 합니다. 이 함수를 호출한 후 A/V 애플리케이션은 작업을 사용하여 QOSSetFlow 함수를 호출해야 합니다. 셰이핑을 원하지 않는 한 QOSSetFlow를 호출할 필요가 없습니다.
예제
다음 코드에서는 QOSAddSocketFromFlow의 사용을 보여 줍니다. QOSCreateHandle 함수는 QOSAddSocketFromFlow에서 사용하는 매개 변수의 초기화에 대한 정보를 제공하는 것으로도 표시됩니다.
전체 샘플 코드 목록은 Windows SDK 참조하세요. SDK 폴더: Samples\NetDs\GQos\Qos2
WSAGetLastError 및 기타 Winsock 함수를 사용하려면 Winsock2.h 헤더 파일을 포함해야 합니다.
QOS_VERSION Version;
HANDLE QoSHandle = NULL;
QOS_FLOWID QoSFlowId = 0; // Flow Id must be 0.
SOCKET ConnectionSocket;
BOOL QoSResult;
// Initialize the QoS version parameter.
Version.MajorVersion = 1;
Version.MinorVersion = 0;
// Get a handle to the QoS subsystem.
QoSResult = QOSCreateHandle(
&Version,
&QoSHandle );
if (QoSResult != TRUE)
{
std::cerr << "QOSCreateHandle failed. Error: ";
std::cerr << WSAGetLastError() << std::endl;
}
// Initialization of ConnectionSocket
// omitted for brevity, but is needed.
/////////////////////////////////////
// Add socket to flow.
QoSResult = QOSAddSocketToFlow(
QoSHandle,
ConnectionSocket,
NULL,
QOSTrafficTypeExcellentEffort,
QOS_NON_ADAPTIVE_FLOW,
&QoSFlowId);
if (QoSResult != TRUE)
{
std::cerr << "QOSAddSocketToFlow failed. Error: ";
std::cerr << WSAGetLastError() << std::endl;
}
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows Vista [데스크톱 앱만 해당] |
지원되는 최소 서버 | Windows Server 2008 [데스크톱 앱만 해당] |
대상 플랫폼 | Windows |
헤더 | qos2.h(Qos2.h 포함) |
라이브러리 | Qwave.lib |
DLL | Qwave.dll |