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


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

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

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

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

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

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

Требования

Требование Ценность
минимальные поддерживаемые клиентские Доступно в Windows Vista и более поздних версиях операционных систем Windows.
целевая платформа Всеобщий
заголовка wsk.h (include 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