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é à 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 des irps avec des fonctions WSK, consultez Utilisation des irps avec les fonctions du noyau Winsock.

Valeur retournée

WskCloseSocket retourne l’un des codes NTSTATUS suivants :

Code de retour Description
STATUS_SUCCESS
Le socket a été correctement fermé. Le IRP sera terminé avec succès status.
STATUS_PENDING
Le sous-système WSK n’a pas pu fermer le socket immédiatement. Le sous-système WSK termine l’IRP après avoir fermé le socket. Le status de l’opération de fermeture est retourné dans le champ IoStatus.Status de l’IRP.
Autres codes status
Une erreur est survenue. L’IRP sera terminé avec l’échec status.

Remarques

Avant d’appeler la fonction WskCloseSocket , une application WSK doit s’assurer qu’aucun autre appel de fonction n’est en cours pour les 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 alors que l’application appelle WskSend sur le même socket dans un autre thread. Tous les appels en cours aux fonctions du socket doivent renvoyer 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 d’appels antérieurs aux fonctions du socket qui ne sont pas encore terminés.

L’appel de la fonction WskCloseSocket entraîne l’annulation et l’exécution par le sous-système WSK de tous les IRP en attente d’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 plus appeler les 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é dans l’appel à WskSocket, WskSocketConnect ou WskControlSocket n’est pas libérée 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 avortée 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 .

Configuration requise

Condition requise Valeur
Client minimal pris en charge Disponible dans Windows Vista et les versions ultérieures des systèmes d’exploitation Windows.
Plateforme cible Universal
En-tête wsk.h (inclure 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