Поделиться через


функция обратного вызова LPFN_RIORESIZEREQUESTQUEUE (mswsock.h)

Функция RIOResizeRequestQueue изменяет размер очереди запросов, чтобы она была больше или меньше для использования с зарегистрированными расширениями ввода-вывода Winsock.

Синтаксис

LPFN_RIORESIZEREQUESTQUEUE LpfnRioresizerequestqueue;

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

Параметры

RQ

Дескриптор, идентифицирующий существующий зарегистрированный дескриптор сокета ввода-вывода (очередь запросов) для изменения размера.

MaxOutstandingReceive

Максимальное число невыполненных операций отправки, разрешенных в сокете. Это значение может быть больше или меньше исходного числа.

Этот параметр обычно является небольшим числом для большинства приложений.

MaxOutstandingSend

Максимальное число невыполненных операций получения, разрешенных в сокете. Это значение может быть больше или меньше исходного числа.

Возвращаемое значение

Если ошибка не возникает, функция RIOResizeRequestQueue возвращает значение TRUE. В противном случае возвращается значение FALSE , а конкретный код ошибки можно получить, вызвав функцию WSAGetLastError .

Код возврата Описание
WSAEINVAL
В функцию передан недопустимый параметр. Эта ошибка возвращается, если параметр RQ недопустим (например, RIO_INVALID_RQ). Эта ошибка также возвращается, если параметры MaxOutstandingReceive и MaxOutstandingSend равны нулю .
WSAENOBUFS
Не удалось выделить достаточный объем памяти. Эта ошибка возвращается, если не удалось выделить память для очереди запросов с измененным размером.
WSAETOOMANYREFS
Существует слишком много операций, которые по-прежнему ссылаются на очередь запросов. Изменение размера очереди запросов до меньшего размера в настоящее время невозможно.

Комментарии

Функция RIOResizeRequestQueue изменяет размер очереди запросов, чтобы она была больше или меньше. Если очередь запросов уже содержит записи, эти записи будут скопированы в новую очередь запросов.

Очередь запросов имеет требуемый минимальный размер, который зависит от текущего количества записей (количество отправки и получения в очереди запросов). Если приложение вызывает функцию RIOResizeRequestQueue и пытается задать слишком малую очередь для количества существующих записей, вызов завершится ошибкой и размер очереди не будет изменен.

Примечание

Указатель на функцию RIOResizeRequestQueue должен быть получен во время выполнения путем вызова функции WSAIoctl с указанным SIO_GET_MULTIPLE_EXTENSION_FUNCTION_POINTER кодом операции. Входной буфер, передаваемый в функцию WSAIoctl , должен содержать WSAID_MULTIPLE_RIO, глобальный уникальный идентификатор (GUID), значение которого определяет функции расширения операций ввода-вывода, зарегистрированные в Winsock. При успешном выполнении выходные данные, возвращаемые функцией WSAIoctl , содержат указатель на структуру RIO_EXTENSION_FUNCTION_TABLE , содержащую указатели на зарегистрированные функции расширения ввода-вывода Winsock. SIO_GET_MULTIPLE_EXTENSION_FUNCTION_POINTER IOCTL определяется в файле заголовка Ws2def.h. GUID WSAID_MULTIPLE_RIO определяется в файле заголовка Mswsock.h .

 

Windows Phone 8. Эта функция поддерживается для приложений Магазина Windows Phone на Windows Phone 8 и более поздних версиях.

Windows 8.1 и Windows Server 2012 R2. Эта функция поддерживается для приложений Магазина Windows на Windows 8.1, Windows Server 2012 R2 и более поздних версиях.

Потокобезопасность

Если несколько потоков пытаются получить доступ к одной и той же RIO_RQ с помощью функции RIODequeueCompletion или RIOResizeRequestQueue , доступ должен координироваться критическим разделом, блокировкой модуля чтения тонким модулем чтения или аналогичным механизмом взаимного исключения. Если очереди завершения не являются общими, взаимное исключение не требуется.

Требования

Требование Значение
Заголовок mswsock.h