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


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

Функция WskConnectEx подключает ориентированный на подключение или потоковый сокет к удаленному адресу транспорта.

WskConnectEx похож на WskConnect , но при необходимости может отправлять буфер данных во время или после синхронизации подключения.

Синтаксис

PFN_WSK_CONNECT_EX PfnWskConnectEx;

NTSTATUS PfnWskConnectEx(
  [in]           PWSK_SOCKET Socket,
  [in]           PSOCKADDR RemoteAddress,
  [in, optional] PWSK_BUF Buffer,
                 ULONG Flags,
  [in, out]      PIRP Irp
)
{...}

Параметры

[in] Socket

Указатель на структуру WSK_SOCKET , указывающую объект сокета для сокета, который подключается к удаленному транспортному адресу.

[in] RemoteAddress

Указатель на структуру , указывающую адрес удаленного транспорта, к которому подключается сокет. Этот указатель должен быть указателем на конкретный тип структуры SOCKADDR , соответствующий семейству адресов, которое приложение WSK указало при создании сокета.

[in, optional] Buffer

Указатель на структуру WSK_BUF , которая содержит данные для отправки во время или после синхронизации подключения. Максимальный допустимый размер в байтах — 65 535.

Flags

Этот параметр зарезервирован для использования системой. Приложение WSK должно задать для этого параметра нулевое значение.

[in, out] Irp

Указатель на выделенный вызывающим объектом IRP, который подсистема WSK использует для асинхронного завершения операции подключения. Дополнительные сведения об использовании IRP с функциями WSK см. в разделе Использование IRP с функциями ядра Winsock.

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

WskConnectEx возвращает один из следующих кодов NTSTATUS:

Код возврата Описание
STATUS_SUCCESS
Сокет успешно подключен к удаленному транспортному адресу. IRP будет завершена с состоянием успешного выполнения.
STATUS_PENDING
Подсистеме WSK не удалось подключить сокет немедленно. Подсистема WSK завершит IRP после подключения сокета к удаленному транспортному адресу. Состояние операции подключения будет возвращено в поле IoStatus.Status IRP.
STATUS_FILE_FORCED_CLOSED
Сокет больше не работает. IRP будет завершен с состоянием сбоя. Приложение WSK должно вызвать функцию WskCloseSocket , чтобы закрыть сокет как можно скорее.
STATUS_INVALID_PARAMETER
Приложение WSK попыталось передать флаг в параметр Flags (так как в настоящее время для WskConnectEx не определены допустимые флаги, это запрещено).
STATUS_BUFFER_OVERFLOW
Приложение WSK попыталось передать буфер размером более 65 535 байт в параметр Buffer .
Другие коды состояния
Произошла ошибка. IRP будет завершен с состоянием сбоя.

Комментарии

Приложение WSK может создавать, связывать и подключать сокет, ориентированный на подключение, в одном вызове функции, вызывая функцию WskSocketConnect , а не функцию WskSocket , функцию WskBind , а затем функцию WskConnectEx . Мы рекомендуем вызывать функцию WskSocketConnect , если приложению WSK не нужно задать параметр сокета или выполнить операцию управления вводом-выводом перед привязкой или подключением сокета.

Приложение WSK может вызывать функцию WskConnectEx только для подключения или потокового сокета, который приложение ранее привязывало к локальному транспортному адресу, вызвав функцию WskBind .

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

Если используется параметр Buffer , вызывающий объект может освободить MDL в своей WSK_BUF структуре сразу после завершения запроса на подключение.

Если перед вызовом WskConnectEx с предоставленным буфером отправки приложение WSK задает параметр TCP_FASTOPEN в сокете WSK с помощью функции WskControlSocket , система при необходимости отправит некоторые или все данные в пакете SYN. Дополнительные сведения см. в разделе Параметр tcp Fastopen в IPPROTO_TCP Параметры сокета.

Требования

Требование Значение
Минимальная версия клиента Windows 10 версии 1703
Целевая платформа Универсальное
Верхняя часть wsk.h (включая Wsk.h)
IRQL <= DISPATCH_LEVEL

См. также раздел

SOCKADDR

WSK_PROVIDER_CONNECTION_DISPATCH WSK_PROVIDER_STREAM_DISPATCH

WSK_SOCKET

WskBind

WskCloseSocket

WskControlSocket

WskDisconnect

WskDisconnectEvent

WskSocket

WskSocketConnect