функция обратного вызова 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:
Возвращаемый код | Описание |
---|---|
|
Сокет был успешно закрыт. IRP будет завершен с состоянием успешности. |
|
Подсистема 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 |