LPFN_RIORESIZECOMPLETIONQUEUE回调函数 (mswsock.h)
RIOResizeCompletionQueue 函数将 I/O 完成队列调整为更大或更小,以便与 Winsock 注册的 I/O 扩展一起使用。
语法
LPFN_RIORESIZECOMPLETIONQUEUE LpfnRioresizecompletionqueue;
BOOL LpfnRioresizecompletionqueue(
RIO_CQ CQ,
DWORD QueueSize
)
{...}
参数
CQ
标识要调整大小的现有 I/O 完成队列的描述符。
QueueSize
返回值
如果未发生错误, 则 RIOResizeCompletionQueue 函数返回 TRUE。 否则,返回 FALSE 值,并且可以通过调用 WSAGetLastError 函数来检索特定的错误代码。
返回代码 | 说明 |
---|---|
系统尝试在调用中使用指针参数时检测到指针地址无效。 如果 CQ 参数中指定的完成队列包含无效指针,则返回此错误。 |
|
向该函数传递了无效参数。 如果 CQ 参数 (RIO_INVALID_CQ 无效(例如) ),则返回此错误。 如果 QueueSize 参数中指定的队列的大小大于 RIO_CQ_MAX_SIZE,也会返回此错误。 |
|
无法分配足够的内存。 如果无法为 QueueSize 参数中指定的队列分配内存,则返回此错误。 |
|
仍有太多操作引用 I/O 完成队列。 目前无法将此 I/O 完成队列的大小调整为更小。 |
RIOResizeCompletionQueue 函数将 I/O 完成队列的大小调整为更大或更小。 如果 I/O 完成队列已包含完成,则这些完成将复制到新的完成队列。
I/O 完成队列具有所需的最小大小,取决于与完成队列关联的请求队列数以及请求队列上的发送和接收数。 如果应用程序调用 RIOResizeCompletionQueue 函数,并尝试将队列设置得太小,而 I/O 完成队列中的现有完成数太小,则调用将失败,并且队列不会调整大小。
注意
必须在运行时通过调用 WSAIoctl 函数并指定SIO_GET_MULTIPLE_EXTENSION_FUNCTION_POINTER opcode 来获取指向 RIOResizeCompletionQueue 函数的函数指针。 传递给 WSAIoctl 函数的输入缓冲区必须包含 WSAID_MULTIPLE_RIO,这是一个全局唯一标识符 (GUID) 其值标识 Winsock 注册的 I/O 扩展函数。 成功后, WSAIoctl 函数返回的输出包含指向 RIO_EXTENSION_FUNCTION_TABLE 结构的指针,该结构包含指向 Winsock 注册的 I/O 扩展函数的指针。 SIO_GET_MULTIPLE_EXTENSION_FUNCTION_POINTER IOCTL 在 Ws2def.h 头文件中定义。 WSAID_MULTIPLE_RIO GUID 在 Mswsock.h 头文件中定义。
Windows Phone 8:Windows Phone 8 及更高版本上的 Windows Phone 应用商店应用支持此函数。
Windows 8.1和Windows Server 2012 R2:Windows 8.1、Windows Server 2012 R2 及更高版本的 Windows 应用商店应用支持此函数。
线程安全性
如果多个线程尝试使用 RIODequeueCompletion 或 RIOResizeCompletionQueue 函数访问同一RIO_CQ,则必须通过关键部分、超薄读取器编写器锁或类似的互斥机制协调访问。 如果未共享完成队列,则不需要相互排除。
要求
要求 | 值 |
---|---|
Header | mswsock.h |