Arrêt de la connexion
La rubrique suivante décrit les opérations qui aboutissent à l’arrêt d’une connexion de socket établie.
Lancement de la séquence d’arrêt
Une connexion de socket peut être retirée de plusieurs façons. WSPShutdown (avec l' équivalent de SD _ Send ou SD _ ) et WSPSendDisconnect peut être utilisé pour initier un arrêt de connexion normal. WSPCloseSocket peut être utilisé pour initier un arrêt normal ou d’abandon, en fonction des options de Lingo appelées par le socket fermant. Consultez la section ci-dessous pour plus d’informations sur les arrêts normaux et d’abandon, et les options de maintien.
Indication de l’arrêt à distance
Les fournisseurs de services indiquent la suppression de connexion lancée par le tiers distant via l' _ événement réseau FD Close. L’arrêt progressif est également indiqué par le biais de WSPRecv lorsque le nombre d’octets lus est 0 pour les protocoles de flux d’octets, ou par le biais d’un code d’erreur de retour de WSAEDISCON pour les protocoles orientés message. Dans tous les cas, un code d’erreur de retour WSPRecv de WSAECONNRESET indique un arrêt d’abandon.
Échange des données utilisateur au moment de l’arrêt
Au moment de la destruction de la connexion, il est également possible (pour les protocoles qui le prennent en charge) d’échanger des données utilisateur entre les points de terminaison. La fin qui initie la destruction peut appeler WSPSendDisconnect pour indiquer qu’il n’y a plus de données à envoyer et que la séquence de destruction de la connexion est lancée. Pour certains protocoles, une partie de cette séquence de destruction est la remise de données déconnectées de l’initiateur de destruction. Après avoir reçu une notification indiquant que l’extrémité distante a initié la séquence de destruction (généralement via l' _ indication FD Close), la fonction WSPRecvDisconnect peut être appelée pour recevoir les données de déconnexion (le cas échéant).
Pour illustrer la façon dont les données de déconnexion peuvent être utilisées, examinez le scénario suivant. La moitié du client d’une application client/serveur est responsable de l’arrêt d’une connexion de Socket. Coïncide avec l’arrêt qu’il fournit (via la déconnexion des données) le nombre total de transactions qu’il a traitées avec le serveur. Le serveur répond ensuite 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 indiqué dans le tableau suivant.
| Côté client | Côté serveur |
|---|---|
| (1) appelle WSPSendDisconnect pour conclure la session et fournir le total de la transaction. | |
| (2) obtient FD _ Close, ou WSPRecv avec une valeur de retour égale à zéro ou WSAEDISCON indiquant un arrêt correct en cours. | |
| (3) appelle WSPRecvDisconnect pour connaître le total de la transaction du client. | |
| (4) calcule le total général cumulé de toutes les transactions. | |
| (5) appelle WSPSendDisconnect pour transmettre le total général. | |
| (6) reçoit l' _ indication FD Close. | (5 ') appelle WSPCloseSocket |
| (7) appelle WSPRecvDisconnect pour recevoir et stocker le total cumulé des transactions. | |
| (8) appelle WSPCloseSocket |
L’étape (5 ') doit suivre l’étape (5), mais elle n’a pas de relation de minutage avec les étapes (6), (7) ou (8).