LPFN_RIORESIZEREQUESTQUEUE回调函数 (mswsock.h)

RIOResizeRequestQueue 函数将请求队列的大小调整为更大或更小,以便与 Winsock 注册的 I/O 扩展一起使用。

语法

LPFN_RIORESIZEREQUESTQUEUE LpfnRioresizerequestqueue;

BOOL LpfnRioresizerequestqueue(
  RIO_RQ RQ,
  DWORD MaxOutstandingReceive,
  DWORD MaxOutstandingSend
)
{...}

参数

RQ

标识现有已注册 I/O 套接字描述符的描述符, (请求队列) 重设大小。

MaxOutstandingReceive

套接字上允许的最大未完成发送数。 此值可以大于或小于原始数字。

对于大多数应用程序,此参数通常是一个小数目。

MaxOutstandingSend

套接字上允许的最大未完成接收数。 此值可以大于或小于原始数字。

返回值

如果未发生错误, RIOResizeRequestQueue 函数将返回 TRUE。 否则,返回 FALSE 值,并且可以通过调用 WSAGetLastError 函数来检索特定的错误代码。

返回代码 说明
WSAEINVAL
向该函数传递了无效参数。 如果 RQ 参数 (RIO_INVALID_RQ 无效(例如) ),则返回此错误。 如果 MaxOutstandingReceiveMaxOutstandingSend 参数均为零,也会返回此错误。
WSAENOBUFS
无法分配足够的内存。 如果无法为重设大小的请求队列分配内存,则返回此错误。
WSAETOOMANYREFS
仍有太多操作引用请求队列。 目前无法将此请求队列的大小调整为更小。

注解

RIOResizeRequestQueue 函数将请求队列的大小调整为更大或更小。 如果请求队列已包含条目,则这些条目将复制到新的请求队列。

请求队列的最小大小取决于当前条目数 (请求队列) 的发送和接收数。 如果应用程序调用 RIOResizeRequestQueue 函数,并尝试将队列设置为太小的现有条目数,则调用将失败,并且队列不会调整大小。

注意

必须在运行时通过调用 WSAIoctl 函数并指定SIO_GET_MULTIPLE_EXTENSION_FUNCTION_POINTER opcode 来获取指向 RIOResizeRequestQueue 函数的函数指针。 传递给 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.1Windows Server 2012 R2:Windows 8.1、Windows Server 2012 R2 及更高版本的 Windows 应用商店应用支持此函数。

线程安全性

如果多个线程尝试使用 RIODequeueCompletionRIOResizeRequestQueue 函数访问同一RIO_RQ,则必须通过关键部分、超薄读取器编写器锁或类似的互斥机制协调访问。 如果未共享完成队列,则不需要相互排除。

要求

要求
Header mswsock.h