Partager via


Fermeture d’un socket SAN

Une fois que le commutateur Windows Sockets de chaque côté d’une connexion appelle la fonction WSPCloseSocket d’un fournisseur de services SAN, le fournisseur de services SAN effectue la procédure suivante pour fermer un socket SAN :

  1. Chaque fournisseur de services SAN de chaque côté de la connexion supprime la connexion et termine les demandes de réception (appels de fonction WSPRecv ) en retournant le code d’erreur approprié au niveau du paramètre lpErrno . Par exemple, un fournisseur de services SAN retourne WSAECONNRESET pour indiquer que l’homologue distant réinitialise la connexion.

    Chaque fournisseur de services SAN signale également l’achèvement des opérations en attente qui se chevauchent pour que le socket SAN soit fermé. Le fournisseur de services SAN appelle la fonction WPUCompleteOverlappedRequest pour signaler l’achèvement d’une opération qui se chevauche. Dans cet appel, le fournisseur de services SAN transmet un pointeur vers la structure WSAOVERLAPPED associée à l’opération qui se chevauche. Le fournisseur de services SAN transmet également le code d’erreur WSA_OPERATION_ABORTED pour spécifier que l’opération qui se chevauche a été annulée parce que le socket SAN a été fermé. Avant de signaler l’achèvement d’une opération qui se chevauche, le fournisseur de services SAN doit libérer toute la mémoire nécessaire à l’opération.

  2. Une fois que le fournisseur de services SAN a terminé d’effectuer des appels up(appels à des fonctions qui sont précédées de WPU) au commutateur à l’aide du handle vers le socket SAN obtenu via un appel up WPUCreateSocketHandle , le fournisseur de services SAN doit effectuer un appel up final au commutateur en appelant la fonction WPUCloseSocketHandle pour fermer le handle de socket. Le fournisseur de services SAN nettoie ensuite tout ce qui concerne le socket SAN. Les appels up sont des appels de fonction à partir de la table de répartition des appels up-call du commutateur. Le commutateur fournit un pointeur vers cette table de répartition d’appel up quand il appelle la fonction WSPStartupEx du fournisseur de services SAN pour commencer à utiliser le fournisseur.

Tant qu’un fournisseur de services SAN effectue la procédure précédente pour fermer un socket SAN, le commutateur prend en charge tout le reste.

Pour éviter les conditions de concurrence entre un fournisseur de services SAN et les fermetures de socket de lancement du commutateur, le fournisseur de services SAN ne doit jamais publier de structures de données liées à un socket SAN tant que le commutateur n’appelle pas WSPCloseSocket.