socket.close socket.shutdown merdouille

Le
chris
Bonjour,

comment on ferme correctement une socket ?

je fais bien un socket.shutdown(1)
puis un socket.close()

le tout correctement
les thread se termine tout seul

et quand j'arrete le tout probleme avec bind tout de suite apres

j'ai essayé de tout lire sur google mais bon
ya un truc qui m'echappe

bon les clients c'est des telnet qui sont fermés coté serveur
le probleme viendrait t il de la ?

Merci pour vos remarque

A+
chris
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 3
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
hg
Le #618252
chris wrote:

Bonjour,

comment on ferme correctement une socket ?

je fais bien un socket.shutdown(1)
puis un socket.close()

le tout correctement
les thread se termine tout seul ...

et quand j'arrete le tout probleme avec bind tout de suite apres

j'ai essayé de tout lire sur google mais bon
ya un truc qui m'echappe

bon les clients c'est des telnet qui sont fermés coté serveur
le probleme viendrait t il de la ?

Merci pour vos remarque

A+
chris


J'ai du mal à comprendre: ton code est côté client ou serveur ... ou les
deux ?

hg

chris
Le #618251
chris wrote:

Bonjour,

comment on ferme correctement une socket ?

je fais bien un socket.shutdown(1)
puis un socket.close()

le tout correctement
les thread se termine tout seul ...

et quand j'arrete le tout probleme avec bind tout de suite apres

j'ai essayé de tout lire sur google mais bon
ya un truc qui m'echappe

bon les clients c'est des telnet qui sont fermés coté serveur
le probleme viendrait t il de la ?

Merci pour vos remarque

A+
chris


J'ai du mal à comprendre: ton code est côté client ou serveur ... ou les
deux ?

hg



Juste coté serveur pour l'instant , le coté client telnet va très bien
en gros
une classe Instance
Qui Lance une classe Serveur(issue de Thread)
Qui lance une classe client(issue de Thread) pour chaque connection

En gros en me connectant je tape shutdown et cela
- met a jour un flag Shutdown sur l'instance Serveur
- arrete le thread

Le Thread serveur stoppe sa boucle et
arrete les connexions des autres Thread connecté

puis il fait un socket.shutdown(1) puis un socket.close()
et c'est tout il rend la main a Instance qui doit s'arreter normalement

mais si je refais tout de suite après le même script python
bind me renvoie une erreur comme si tout ca ne s'était pas bien arrétée

Note : j'utilise des sockets non bloquantes

des remarques , une piste un retour d'expérience ?

Merci et a+


maric
Le #618250
chris wrote:

...


des remarques , une piste un retour d'expérience ?

Merci et a+


Oui j'ai rencontrer le même problème, j'avais écrit un petit serveur
réseaux pendant une formation linux pour donner un exemple à mes
auditeurs, et tout se passait comme si les appels successif à shutdown
et close ne suffisait pas à libérer les ressource système, la socket
restait ouverte et il faut attendre que le kernel la nettoie tout seul
pour pouvoir l'ouvrir de nouveau.

Ceci dit je me souviens plus de la solution, tu pourrais préciser l'os
et la version de python, je ferais un essai dès que je remets la main
sur ce script.


hg
Le #618249
chris wrote:

chris wrote:

Bonjour,

comment on ferme correctement une socket ?

je fais bien un socket.shutdown(1)
puis un socket.close()

le tout correctement
les thread se termine tout seul ...

et quand j'arrete le tout probleme avec bind tout de suite apres

j'ai essayé de tout lire sur google mais bon
ya un truc qui m'echappe

bon les clients c'est des telnet qui sont fermés coté serveur
le probleme viendrait t il de la ?

Merci pour vos remarque

A+
chris


J'ai du mal à comprendre: ton code est côté client ou serveur ... ou les
deux ?

hg



Juste coté serveur pour l'instant , le coté client telnet va très bien
en gros
une classe Instance
Qui Lance une classe Serveur(issue de Thread)
Qui lance une classe client(issue de Thread) pour chaque connection

En gros en me connectant je tape shutdown et cela
- met a jour un flag Shutdown sur l'instance Serveur
- arrete le thread

Le Thread serveur stoppe sa boucle et
arrete les connexions des autres Thread connecté

puis il fait un socket.shutdown(1) puis un socket.close()
et c'est tout il rend la main a Instance qui doit s'arreter normalement

mais si je refais tout de suite après le même script python
bind me renvoie une erreur comme si tout ca ne s'était pas bien arrétée

Note : j'utilise des sockets non bloquantes

des remarques , une piste un retour d'expérience ?

Merci et a+



Je n'utilise pas le shutdown côté serveur (peut-être une erreur).

1) fais-tu un join pour t'assurer que tous tes clients sont bien partis ?
2) fermes-tu ton socket "master" ensuite ?

Le fait que ton bind suivant plante montre que tu as encore des
connexions "en l'air"

hg



chris
Le #618248
Ubuntu 7.04 a jour + Python 2.5.1

A+
chris
Laurent Pointal
Le #618247
chris wrote:

Bonjour,

comment on ferme correctement une socket ?

je fais bien un socket.shutdown(1)
puis un socket.close()

le tout correctement
les thread se termine tout seul ...

et quand j'arrete le tout probleme avec bind tout de suite apres

j'ai essayé de tout lire sur google mais bon
ya un truc qui m'echappe

bon les clients c'est des telnet qui sont fermés coté serveur
le probleme viendrait t il de la ?

Merci pour vos remarque


Une piste... option SO_REUSEADDR

A+
chris


Pierre Hanser
Le #618246
chris wrote:

Bonjour,

comment on ferme correctement une socket ?



Une piste... option SO_REUSEADDR



sans cette option, c'est la stack IP de l'os qui
fait respecter un délai pour eviter de risquer
de se melanger les pinceaux entre les paquets
de 2 sessions consecutives


chris
Le #618028


Je n'utilise pas le shutdown côté serveur (peut-être une erreur).


J'ai essaye mais sans plus de resultat


1) fais-tu un join pour t'assurer que tous tes clients sont bien partis ?


non mais
for th in serveur.clients:
th.conn.close()

et en fait je vais verifier mais si cela se trouve j'oubli le join()

2) fermes-tu ton socket "master" ensuite ?



Oui

Le fait que ton bind suivant plante montre que tu as encore des
connexions "en l'air"

hg





Merci
A+

Laurent Pointal
Le #617800
chris wrote:

Bonjour,

comment on ferme correctement une socket ?

Une piste... option SO_REUSEADDR




sans cette option, c'est la stack IP de l'os qui
fait respecter un délai pour eviter de risquer
de se melanger les pinceaux entre les paquets
de 2 sessions consecutives


Oui, mais si le délai est un peu long, ça pourrais expliquer le
"et quand j'arrete le tout probleme avec bind tout de suite apres"
de chris.



hg
Le #629105
chris wrote:



Je n'utilise pas le shutdown côté serveur (peut-être une erreur).


J'ai essaye mais sans plus de resultat


1) fais-tu un join pour t'assurer que tous tes clients sont bien partis ?


non mais
for th in serveur.clients:
th.conn.close()

et en fait je vais verifier mais si cela se trouve j'oubli le join()

2) fermes-tu ton socket "master" ensuite ?



Oui

Le fait que ton bind suivant plante montre que tu as encore des
connexions "en l'air"

hg





Merci
A+



As-tu des try: except: dans tes threads clients ?

Puisque tu les plante depuis ta tache principale, ils risquent de ne pas
aimer.

... je te conseille d'utiliser join.

hg


Publicité
Poster une réponse
Anonyme