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