Configuration et retrait de la connexion
La fonction WSAAccept permet à une application d’obtenir des informations sur l’appelant, telles que l’identificateur de l’appelant et la qualité de service, avant de décider s’il faut accepter une demande de connexion entrante. Cela est effectué avec un rappel à une fonction de condition fournie par l’application.
Les données utilisateur à utilisateur spécifiées par les paramètres de la fonction WSAConnect et de la fonction condition de WSAAccept peuvent être transférées à l’homologue lors de l’établissement de la connexion, à condition que cette fonctionnalité soit prise en charge par le fournisseur de services.
Il est également possible (pour les protocoles qui le prennent en charge) d’échanger des données utilisateur entre les points de terminaison au moment de la désactivation de la connexion. La fin qui lance la démontage peut appeler la fonction WSASendDisconnect pour indiquer qu’il n’y a plus de données envoyées et pour lancer la séquence de retrait de connexion. Pour certains protocoles, une partie de la récupération est la remise de données de déconnexion à partir de l’initiateur de retrait. Après avoir reçu une notification indiquant que la terminaison distante a lancé la suppression (généralement par l’indication FD_CLOSE), la fonction WSARecvDisconnect peut être appelée pour recevoir les données de déconnexion, le cas échéant.
Pour illustrer comment les données de déconnexion peuvent être utilisées, envisagez le scénario suivant. La moitié cliente d’une application cliente/serveur est responsable de l’arrêt d’une connexion de socket. Coïncidant avec l’arrêt, il fournit (à l’aide de données de déconnexion) le nombre total de transactions qu’il a traitées avec le serveur. Le serveur répond à son tour avec le total cumulé des transactions qu’il a traitées avec tous les clients. La séquence d’appels et d’indications peut se produire comme suit :
Côté client | Côté serveur |
---|---|
(1) Appelez WSASendDisconnect pour conclure la session et fournir le total de la transaction. | |
(2) Obtenir FD_CLOSE, recv avec une valeur de retour égale à zéro ou retour d’erreur WSAEDISCON à partir de WSARecv indiquant un arrêt normal en cours. | |
(3) Appelez WSARecvDisconnect pour obtenir le total des transactions du client. | |
(4) Calculer le total général cumulé de toutes les transactions. | |
(5) Appelez WSASendDisconnect pour transmettre le total général. | |
(6) Recevoir FD_CLOSE indication. | (5a) Appeler closesocket. |
(7) Appelez WSARecvDisconnect pour recevoir et stocker le total général cumulé des transactions. | |
(8) Appeler closesocket |
Notez que l’étape (5a) doit suivre l’étape (5), mais n’a aucune relation de minutage avec l’étape (6), (7) ou (8).