Fermeture des winsocks

Signaler
Messages postés
20
Date d'inscription
mercredi 28 mai 2003
Statut
Membre
Dernière intervention
25 septembre 2007
-
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
-
Bonjour à tous,

J'ai développé une application client/serveur pour l'envoi de messages en interne basé sur les winsocks.
Cette application fonctionne très bien dans le cadre d'un fonctionnement "normal".
Mon problème est le suivant:

Existe-il un moyen de fermer les winsocks ainisi que l'application en même temps que Windows? J'ai surfer sur le net et je n'ais rien trouver sur ce sujet. Pour être plus précis, lorsque l'on quitte normalement (bouton "Quitter") l'application, les connexions se ferment bien et les clients sont bien déconnectés du serveur. Mais lorsque l'on quitte windows sans fermé l'application (oubli) au préalable, les connexions restent activent et empêchent, donc, au redémarrage de windows ainsi que de l'application que les clients se connectent.

Auriez-vous, donc, une idée à me soumettre?
D'avance merci pour vos réponses.
Bonne journée.

2 réponses

Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
37
Si tu quitte Windows, je doute que les connections restent ouvertes en tout cas sur cette machine là. Sur les machines qui y sont connectées effectivement les connections vont restée ouvertes un certains temps.

Sinon regarde les évènement QueryUnload et Unload de ta form, tu as un paramètre qui t'indique la raison de la requette de fermeture de la form.

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
73
Salut
Comme le dit Casy, c'est dans Form_QueryUnload dans lequel le programme passe en cas de demande de fermeture, volontaire ou pas.
Un des paramètres de cette Sub te fournit la raison (UnloadMode : voir l'aide).
Si tu refuses que l'application soit fermée, passe le Cancel à True avant de sortir de cette Sub
Si tu autorises la fermeture de l'application, laisse le Cancel à False (ou 0), la Sub suivante (et dernière) qui s'exécutera sera Form_Unload. C'est là dedans qu'il faut fermer tes connexions.
Que les Winsocks de tes clients soient indexés ou pas, il te suffit de faire une boucle (en supposant que les Winsocks sont implantés sur ta forme et pas sur une autre) :

Dim xxx As Winsock
For Each xxx In Me
   If xxx.State <> sckClosed Then
       xxx.Close
       DoEvents
   End If
Next
Le DoEvents est important pour laisser le temps au composant d'exécuter cette fermeture

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)