Partager via


PFN_WSK_CLOSE_SOCKET fonction de rappel (wsk.h)

La fonction WskCloseSocket ferme un socket et libère toutes les ressources associées.

Syntaxe

PFN_WSK_CLOSE_SOCKET PfnWskCloseSocket;

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

Paramètres

[in] Socket

Pointeur vers une structure WSK_SOCKET qui spécifie l’objet socket pour le socket en cours de fermeture.

[in, out] Irp

Pointeur vers un IRP alloué par l’appelant que le sous-système WSK utilise pour terminer l’opération de fermeture de manière asynchrone. Pour plus d’informations sur l’utilisation d’IRPs avec des fonctions WSK, consultez Utilisation d’IRPs avec winsock Kernel Functions.

Valeur de retour

WskCloseSocket retourne l’un des codes NTSTATUS suivants :

Retourner le code Description
STATUS_SUCCESS
Le socket a été correctement fermé. L’IRP sera terminé avec l’état de réussite.
STATUS_PENDING
Le sous-système WSK n’a pas pu fermer le socket immédiatement. Le sous-système WSK termine l’IRP une fois qu’il a fermé le socket. L’état de l’opération de fermeture est retourné dans le champ IoStatus.Status du protocole IRP.
Autres codes d’état
Une erreur s’est produite. L’IRP est terminé avec l’état d’échec.

Remarques

Avant d’appeler la fonction WskCloseSocket, une application WSK doit s’assurer qu’il n’existe aucun autre appel de fonction en cours à l’une des fonctions du socket, y compris les fonctions d’extension, dans les autres threads de l’application. Par exemple, une application WSK ne doit pas appeler WskCloseSocket sur un socket dans un thread pendant que l’application appelle WskSend sur le même socket dans un autre thread. Les appels en cours aux fonctions du socket doivent retourner le contrôle à l’application WSK avant d’appeler WskCloseSocket pour fermer le socket. Toutefois, une application WSK peut appeler WskCloseSocket s’il existe des IRP en attente à partir des appels antérieurs aux fonctions du socket qui n’ont pas encore été terminées.

L’appel de la fonction WskCloseSocket entraîne l’annulation et l’exécution de tous les IRPs en attente à partir des appels antérieurs aux fonctions du socket. Le sous-système WSK garantit également que toutes les fonctions de rappel d’événement en cours ont retourné le contrôle au sous-système WSK avant de fermer le socket.

Une fois qu’une application WSK a appelé WskCloseSocket, elle ne doit pas effectuer d’appels supplémentaires à l’une des fonctions du socket.

Si une application WSK applique un descripteur de sécurité à un socket, la copie mise en cache du descripteur de sécurité spécifiée dans l’appel à WskSocket, WskSocketConnect, ou WskControlSocket n’est pas libéré lorsque le socket est fermé. Une application WSK doit libérer la copie mise en cache du descripteur de sécurité à l’aide de l’opération de contrôle client WSK_RELEASE_SD lorsque le descripteur de sécurité n’est plus nécessaire.

Le sous-système WSK libère la mémoire de l’objet socket du socket, WSK_SOCKET, qui a été alloué par le sous-système WSK lors de la création du socket.

Pour les sockets orientés connexion, la fonction WskCloseSocket effectue toujours une déconnexion abortive du socket, sauf si le socket est déjà entièrement déconnecté dans les deux sens. Pour déconnecter correctement un socket orienté connexion d’une adresse de transport distante, une application WSK doit appeler la fonction WskDisconnect.

Exigences

Exigence Valeur
client minimum pris en charge Disponible dans Windows Vista et versions ultérieures des systèmes d’exploitation Windows.
plateforme cible Universel
d’en-tête wsk.h (include Wsk.h)
IRQL <= DISPATCH_LEVEL

Voir aussi

WSK_PROVIDER_BASIC_DISPATCH

WSK_PROVIDER_CONNECTION_DISPATCH WSK_PROVIDER_DATAGRAM_DISPATCH

WSK_PROVIDER_LISTEN_DISPATCH

WSK_SOCKET

WskControlSocket

WskDisconnect

WskSocket

WskSocketConnect