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


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

Функция WskCloseSocket закрывает сокет и освобождает все связанные ресурсы.

Синтаксис

PFN_WSK_CLOSE_SOCKET PfnWskCloseSocket;

NTSTATUS PfnWskCloseSocket(
  [in]      PWSK_SOCKET Socket,
  [in, out] PIRP Irp
)
{...}

Параметры

[in] Socket

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

[in, out] Irp

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

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

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

Код возврата Описание
STATUS_SUCCESS
Сокет успешно закрыт. IRP будет завершен с состоянием успешного выполнения.
STATUS_PENDING
Подсистеме WSK не удалось закрыть сокет немедленно. Подсистема WSK завершит IRP после закрытия сокета. Состояние операции закрытия будет возвращено в поле IoStatus.Status IRP.
Другие коды состояния
Произошла ошибка. IRP будет завершен с состоянием сбоя.

Комментарии

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

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

После того как приложение WSK вызовет WskCloseSocket, оно не должно выполнять дальнейшие вызовы каких-либо функций сокета.

Если приложение WSK применяет дескриптор безопасности к сокету, кэшируемая копия дескриптора безопасности, указанного в вызове WskSocket, WskSocketConnect или WskControlSocket , не освобождается при закрытии сокета. Приложение WSK должно освободить кэшированную копию дескриптора безопасности с помощью операции управления клиентом WSK_RELEASE_SD , когда дескриптор безопасности больше не требуется.

Подсистема WSK освобождает память для объекта сокета , WSK_SOCKET, который был выделен подсистемой WSK при создании сокета.

Для сокетов, ориентированных на подключение, функция WskCloseSocket всегда выполняет прерывание отключения сокета, если только сокет не полностью отключен в обоих направлениях. Чтобы корректно отключить сокет, ориентированный на подключение, от удаленного транспортного адреса, приложение WSK должно вызвать функцию WskDisconnect .

Требования

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

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

WSK_PROVIDER_BASIC_DISPATCH

WSK_PROVIDER_CONNECTION_DISPATCH WSK_PROVIDER_DATAGRAM_DISPATCH

WSK_PROVIDER_LISTEN_DISPATCH

WSK_SOCKET

WskControlSocket

WskDisconnect

WskSocket

WskSocketConnect