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