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


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

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

Синтаксис

PFN_WSK_SEND PfnWskSend;

NTSTATUS PfnWskSend(
  [in]      PWSK_SOCKET Socket,
  [in]      PWSK_BUF Buffer,
  [in]      ULONG Flags,
  [in, out] PIRP Irp
)
{...}

Параметры

[in] Socket

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

[in] Buffer

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

[in] Flags

Значение ULONG, содержащее побитовое или сочетание следующих флагов:

WSK_FLAG_NODELAY

Направляет базовый транспорт для немедленной отправки данных и всех данных, ранее помещенных в очередь, в удаленное приложение без задержки.

Этот флаг поддерживается транспортным протоколом Microsoft TCP/IP. Этот флаг может не поддерживаться другими транспортными протоколами.

[in, out] Irp

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

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

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

Код возврата Описание
STATUS_SUCCESS
Данные успешно отправлены через сокет. IRP будет завершена с состоянием успешного выполнения. Поле IoStatus.Information IRP содержит количество отправленных байтов.
STATUS_PENDING
Подсистеме WSK не удалось немедленно отправить данные через сокет. Подсистема WSK завершит IRP после отправки данных через сокет. Состояние операции отправки будет возвращено в поле IoStatus.Status IRP. Если операция выполнена успешно, поле IoStatus.Information IRP будет содержать количество отправленных байтов.
STATUS_FILE_FORCED_CLOSED
Сокет больше не работает. IRP будет завершен с состоянием сбоя. Приложение WSK должно вызвать функцию WskCloseSocket , чтобы закрыть сокет как можно скорее.
STATUS_NOT_SUPPORTED
Указанный флаг не поддерживается базовым сетевым транспортом.
Другие коды состояния
Произошла ошибка. IRP будет завершен с состоянием сбоя.

Комментарии

Приложение WSK может вызывать функцию WskSend только для подключения или потокового сокета, который ранее был подключен к удаленному транспортному адресу. Сокет, ориентированный на подключение, подключается к удаленному транспортному адресу одним из следующих способов:

  • Приложение WSK подключает сокет, вызывая функцию WskConnect .
  • Приложение WSK создает, привязывает и подключает сокет, вызывая функцию WskSocketConnect .
  • Подсистема WSK подключает сокет, когда приложение WSK принимает входящий запрос на подключение к прослушивателю сокета.
Если функция WskSend возвращает STATUS_PENDING, цепочка MDL, описанная в WSK_BUF структуре, на которую указывает параметр Buffer , должна оставаться заблокированной в памяти до завершения IRP.

Подсистема WSK не выполняет буферизацию данных при отправке данных через сокет. Таким образом, вызов функции WskSend не будет выполнен подсистемой WSK, пока не будут отправлены все данные.

Требования

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

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

WSK_BUF

WSK_PROVIDER_CONNECTION_DISPATCH

WSK_PROVIDER_STREAM_DISPATCH

WSK_SOCKET

WskCloseSocket

WskReceive

WskReceiveEvent