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


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

Функция WskDisconnect отключает сокет для подключения или потока от удаленного адреса транспорта.

Синтаксис

PFN_WSK_DISCONNECT PfnWskDisconnect;

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

Параметры

[in] Socket

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

[in, optional] Buffer

Указатель на структуру WSK_BUF. Эта структура описывает буфер данных, содержащий данные, передаваемые подсистемой WSK на удаленный адрес транспорта перед отключением сокета. Если такие данные не передаются, приложение WSK задает этот указатель на NULL. Если WSK_FLAG_ABORTIVE указан в параметре флагов , параметр буфера должен быть NULL.

[in] Flags

Значение ULONG, содержащее следующий флаг или ноль:

WSK_FLAG_ABORTIVE

Направляет подсистему WSK для прерывания отключения сокета. Если приложение WSK не указывает этот флаг, подсистема WSK выполнит корректное отключение сокета.

[in, out] Irp

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

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

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

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

Замечания

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

WskDisconnect приводит к тому, что подсистема WSK уведомляет удаленный адрес транспорта с помощью любых средств, подходящих для базового транспорта, что подключение отключено. Если параметр буфера не являетсяNULL, подсистема WSK передает данные в буфер в адрес удаленного транспорта перед отключением сокета.

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

Обратите внимание, что не все транспорты поддерживают полуоткрытые подключения. Если транспорт не поддерживает полуоткрытые подключения, приложение WSK не получит никаких дополнительных данных из удаленного адреса транспорта после выполнения корректного отключения.

При корректном отключении IRP завершается только в том случае, если операция отключения полностью завершена протоколом транспорта. Для некоторых транспортных протоколов IRP может не завершиться, если возникла проблема с передачей данных в адрес удаленного транспорта. В этой ситуации приложение WSK может восстановиться путем вызова функции WskDisconnect и указания флага WSK_FLAG_ABORTIVE или вызова функции WskCloseSocket. В любой ситуации подсистема WSK прерывает отключение сокета и принудительное завершение ожидающего IRP.

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

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

Требования

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

См. также

WSK_BUF

WSK_PROVIDER_CONNECTION_DISPATCH

WSK_PROVIDER_STREAM_DISPATCH

WSK_SOCKET

WskCloseSocket

WskConnect

WskDisconnectEvent

WskSocketConnect