функция обратного вызова 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 указан в параметре Flags , параметр Buffer должен иметь значение NULL.
[in] Flags
Значение ULONG, содержащее следующий флаг, или ноль:
WSK_FLAG_ABORTIVE
Направляет подсистему WSK на выполнение прерывания отключения сокета. Если приложение WSK не указывает этот флаг, подсистема WSK выполнит корректное отключение сокета.
[in, out] Irp
Указатель на выделенный вызывающим методом IRP, который подсистема WSK использует для асинхронного завершения операции отключения. Дополнительные сведения об использовании IRP с функциями WSK см. в статье Использование irPs с функциями ядра Winsock.
Возвращаемое значение
WskDisconnect возвращает один из следующих кодов NTSTATUS:
Код возврата | Описание |
---|---|
|
Сокет был успешно отключен от удаленного транспортного адреса. IRP будет завершен с состоянием успешного выполнения. |
|
Подсистеме WSK не удалось немедленно отключить сокет. Подсистема WSK завершит IRP после отключения сокета от удаленного транспортного адреса. Состояние операции отключения будет возвращено в поле IoStatus.Status IRP. |
|
Сокет больше не работает. IRP будет завершен с состоянием сбоя. Приложение WSK должно вызвать функцию WskCloseSocket , чтобы как можно скорее закрыть сокет. |
|
Произошла ошибка. IRP будет завершен с состоянием сбоя. |
Комментарии
Приложение WSK может вызывать функцию WskDisconnect только в сокете, ориентированном на подключение или потоке, который ранее был подключен к удаленному транспортному адресу, или в сокете, принятом в сокете прослушивания.
WskDisconnect заставляет подсистему WSK уведомлять адрес удаленного транспорта любым способом, подходящим для базового транспорта, о том, что подключение отключено. Если параметр Buffer не равен 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 (включая Wsk.h) |
IRQL | <= DISPATCH_LEVEL |