QOSRemoveSocketFromFlow 函数 (qos2.h)

QOSRemoveSocketFromFlow 函数通知 QOS 子系统以前添加的流已被应用程序终止,并且子系统必须相应地更新其内部信息。

语法

ExternC BOOL QOSRemoveSocketFromFlow(
  [in]           HANDLE     QOSHandle,
  [in, optional] SOCKET     Socket,
  [in]           QOS_FLOWID FlowId,
                 DWORD      Flags
);

参数

[in] QOSHandle

QOSCreateHandle 返回的 QOS 子系统的句柄

[in, optional] Socket

要从流中删除的套接字。

只有使用 QOS_NON_ADAPTIVE_FLOW 标志创建的流才能将多个套接字添加到同一流。 通过在此调用中传递 Socket 参数,可以单独删除每个套接字。 如果未传递 Socket 参数,则将销毁整个流。 如果只将一个套接字附加到流,则将此套接字作为参数传递给此函数以及将 NULL 作为套接字传递是等效的调用。

[in] FlowId

流标识符。 QOS_FLOWID是无符号 32 位整数。

Flags

保留供将来使用。 此参数必须设置为 0。

返回值

如果该函数成功,则返回值为非零值。

如果函数失败,返回值为 0。 要获得更多的错误信息,请调用 GetLastError。 下面是一些可能的错误代码。

返回代码 说明
ERROR_INVALID_HANDLE
QOSHandle 参数无效。
ERROR_NOT_FOUND
FlowId 参数无效。
ERROR_NOT_ENOUGH_MEMORY
内存分配失败。
ERROR_NO_SYSTEM_RESOURCES
系统资源不足,无法执行该操作。
ERROR_OPERATION_ABORTED
请求已被阻止。
ERROR_IO_DEVICE
由于出现 I/O 设备错误,因此无法执行该请求。
ERROR_DEVICE_REINITIALIZATION_NEEDED
由于硬件错误,指示的设备需要重新初始化。 应用程序应清理并再次调用 QOSCreateHandle
ERROR_HOST_UNREACHABLE
无法访问网络位置。

注解

调用 QOSCloseHandle 函数会立即中止该句柄添加的所有挂起操作和流。 如果在 QOSRemoveSocketFromFlow 调用仍在进行时关闭句柄,则调用将以 ERROR_OPERATION_ABORTED完成。

示例

以下代码片段演示了在用于“清理”QoS 资源的应用程序函数中使用 QOSRemoveSocketFromFlowQOSStopTrackingClientQOSCloseHandle 。 有关参数初始化的信息,请参阅 QOSCreateHandle 函数。

有关完整的示例代码列表,请参阅Windows SDK。 SDK 文件夹:Samples\NetDs\GQos\Qos2

注意 必须包含 winsock2.h 头文件才能使用 WSAGetLastError 和其他 Winsock 函数。
 
int CleanUpQos( HANDLE qosHandle, 
            SOCKET connSocket, 
            QOS_FLOWID qosFlowId, 
            DWORD qosFlags,
            addrinfo *ptrAdrinfo) // qosFlags must be 0 
{

    int result = 0;
    BOOL removeStatus = FALSE;
 
    // The global variable gblClientTracking would be set on successful 
    // call to the QOSStartTrackingClient function.   
    if(gblClientTracking == TRUE && qosHandle != NULL)
    {
        if(!QOSStopTrackingClient(qosHandle, (sockaddr*)ptrAdrinfo->ai_addr, 0))
        {
            gblClientTracking = FALSE;
            std::cerr << std::endl;
            std::cerr << __FILE__ <<" Line: " << __LINE__ ;
            std::cerr << " - QOSStartTrackingClient failed. Exception code: "; 
            std::cerr << GetLastError() ;
        }
        else
        {
            std::cout << "QoS client tracking stopped." << std::endl;
        }
    }

    if (qosFlowId != 0 )
    {
        if( QOSRemoveSocketFromFlow(
                qosHandle,
                connSocket,
                qosFlowId,
                qosFlags) != TRUE)
        {        
            result = WSAGetLastError();
        }
        else
        {
            // Mutex + Wait function would provide additional protection 
            // against the possibility of ERROR_OPERATION_ABORTED exception.     
            if( QOSCloseHandle(qosHandle) != TRUE)
                result = WSAGetLastError();
        }
    }

    return(result);
}


要求

要求
最低受支持的客户端 Windows Vista [仅限桌面应用]
最低受支持的服务器 Windows Server 2008 [仅限桌面应用]
目标平台 Windows
标头 qos2.h (包括 Qos2.h)
Library Qwave.lib
DLL Qwave.dll

另请参阅

质量 Windows 音频/视频体验 (qWAVE)