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


функция обратного вызова 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 для асинхронного выполнения операции отправки. Дополнительные сведения об использовании irPs с функциями WSK см. в разделе Использование irPs с функциями ядра 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, на которую указывает параметр буфера, должен оставаться заблокированным в памяти до завершения IRP.

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

Требования

Требование Ценность
минимальные поддерживаемые клиентские Доступно в Windows Vista и более поздних версиях операционных систем Windows.
целевая платформа Всеобщий
заголовка wsk.h (include Wsk.h)
IRQL <= DISPATCH_LEVEL

См. также

WSK_BUF

WSK_PROVIDER_CONNECTION_DISPATCH

WSK_PROVIDER_STREAM_DISPATCH

WSK_SOCKET

WskCloseSocket

WskReceive

WskReceiveEvent