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 函数来检索特定的错误代码。
返回代码 | 说明 |
---|---|
向该函数传递了无效参数。 如果 RQ 参数 (RIO_INVALID_RQ 无效(例如) ),则返回此错误。 如果 MaxOutstandingReceive 和 MaxOutstandingSend 参数均为零,也会返回此错误。 |
|
无法分配足够的内存。 如果无法为重设大小的请求队列分配内存,则返回此错误。 |
|
仍有太多操作引用请求队列。 目前无法将此请求队列的大小调整为更小。 |
注解
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.1和Windows Server 2012 R2:Windows 8.1、Windows Server 2012 R2 及更高版本的 Windows 应用商店应用支持此函数。
线程安全性
如果多个线程尝试使用 RIODequeueCompletion 或 RIOResizeRequestQueue 函数访问同一RIO_RQ,则必须通过关键部分、超薄读取器编写器锁或类似的互斥机制协调访问。 如果未共享完成队列,则不需要相互排除。
要求
要求 | 值 |
---|---|
Header | mswsock.h |