다음을 통해 공유


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 구조체는 대상 포트를 지정해야 합니다.

참고 소켓이 이미 연결된 경우 DestAddr는 선택 사항입니다. 이 매개 변수를 지정하면 원격 IP 주소 및 포트가 소켓의 연결 호출에 사용된 것과 일치해야 합니다.

소켓이 연결되지 않은 경우 이 매개 변수를 지정해야 합니다. 소켓이 이미 연결된 경우 이 매개 변수를 지정할 필요가 없습니다. 이 경우 매개 변수가 여전히 지정된 경우 대상 호스트 및 포트는 소켓 연결 호출 중에 지정된 것과 일치해야 합니다.

TCP에서 소켓 연결 호출이 지연될 수 있으므로 연결이 설정되기 전에 QOSAddSocketToFlow 를 호출하여 DestAddr 매개 변수에서 원격 시스템의 IP 주소 및 포트 번호를 전달할 수 있습니다.

 

[in] TrafficType

이 흐름이 사용될 트래픽 유형을 지정하는 QOS_TRAFFIC_TYPE 상수입니다.

[in, optional] Flags

선택적 플래그 값입니다.

의미
QOS_NON_ADAPTIVE_FLOW
지정된 경우 QoS 하위 시스템은 이 흐름의 네트워크 경로에 대한 데이터를 수집하지 않습니다. 따라서 대역폭 추정 기술을 사용하는 함수는 사용할 수 없습니다. 예를 들어 작업 값이 QOSNotifyCongested, QOSNotifyUncongestedQOSNotifyAvailable인 작업 값이QOSQueryFlowFundamentalsQOSNotifyFlowQOSQueryFlow를 차단합니다.

[in, out] FlowId

흐름 식별자를 수신하는 버퍼에 대한 포인터입니다. 입력에서 이 값은 0이어야 합니다. 출력에서 호출이 성공하면 버퍼에 흐름 식별자가 포함됩니다.

소켓이 기존 흐름에 추가되는 경우 이 매개 변수는 해당 흐름의 식별자가 됩니다.

사용된 여러 소켓이 동일한 QoS 흐름 속성을 공유할 수 있는 경우 애플리케이션에서 이 매개 변수를 사용할 수 있습니다. 그런 다음 QoS 하위 시스템은 동일한 속성을 가진 후속 소켓에 대한 새 흐름을 프로비전하는 오버헤드를 발생시키지 않아도 됩니다. 적응형이 아닌 흐름만 기존 흐름에 연결된 여러 소켓을 가질 수 있습니다.

QOS_FLOWID 부호 없는 32비트 정수입니다.

반환 값

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

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

반환 코드 설명
ERROR_CONNECTION_REFUSED
원격 시스템에서 네트워크 연결을 거부했습니다.
ERROR_INVALID_HANDLE
QOSHandle 매개 변수가 잘못되었습니다.
ERROR_INVALID_PARAMETER
FlowId 매개 변수가 잘못되었습니다.
참고 이 값은 DestAddr 매개 변수를 통해 IPv4/v6 혼합 주소를 제공한 경우에도 반환됩니다.
 
ERROR_NOT_ENOUGH_MEMORY
메모리 할당에 실패했습니다.
ERROR_NO_SYSTEM_RESOURCES
작업을 수행할 리소스가 부족합니다.
ERROR_IO_DEVICE
I/O 디바이스 오류 때문에 요청을 수행할 수 없는 경우
ERROR_DEVICE_REINITIALIZATION_NEEDED
하드웨어 오류로 인해 표시된 디바이스를 다시 초기화해야 합니다. 애플리케이션은 클린 QOSCreateHandle을 다시 호출해야 합니다.
ERROR_NOT_SUPPORTED
요청이 지원되지 않습니다.
ERROR_ADAP_HDW_ERR
네트워크 어댑터 하드웨어 오류가 발생했습니다.
ERROR_HOST_UNREACHABLE
네트워크 위치에 연결할 수 없습니다.

설명

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

추가 정보

QOSCreateHandle

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