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。 下面是一些可能的错误代码。
返回代码 | 说明 |
---|---|
|
QOSHandle 参数无效。 |
|
FlowId 参数无效。 |
|
内存分配失败。 |
|
系统资源不足,无法执行该操作。 |
|
请求已被阻止。 |
|
由于出现 I/O 设备错误,因此无法执行该请求。 |
|
由于硬件错误,指示的设备需要重新初始化。 应用程序应清理并再次调用 QOSCreateHandle 。 |
|
无法访问网络位置。 |
注解
调用 QOSCloseHandle 函数会立即中止该句柄添加的所有挂起操作和流。 如果在 QOSRemoveSocketFromFlow 调用仍在进行时关闭句柄,则调用将以 ERROR_OPERATION_ABORTED完成。
示例
以下代码片段演示了在用于“清理”QoS 资源的应用程序函数中使用 QOSRemoveSocketFromFlow、 QOSStopTrackingClient 和 QOSCloseHandle 。 有关参数初始化的信息,请参阅 QOSCreateHandle 函数。
有关完整的示例代码列表,请参阅Windows SDK。 SDK 文件夹:Samples\NetDs\GQos\Qos2
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 |