Fermeture des winsocks

Bastien35 Messages postés 20 Date d'inscription mercredi 28 mai 2003 Statut Membre Dernière intervention 25 septembre 2007 - 1 août 2007 à 16:58
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 - 1 août 2007 à 19:53
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

cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
1 août 2007 à 19:38
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
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
1 août 2007 à 19:53
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)
0
Rejoignez-nous