OVH Cloud OVH Cloud

n sockets sur un même serveur ?

4 réponses
Avatar
Pendloup
Bonjour,


J'ai un moteur de communication multitaches qui envoie et recoit des
donn=E9es. Chaque thread peut =E9tablir une connexion sur un serveur ftp
via un socket qui lui est propre. Mon pb est que n threads se
connectent sur le m=EAme serveur. Or quand l'un d' entre eux ferme sa
connexion, les autres peuvent =EAtre perturb=E9s, c'est =E0 dire qu'ils
perdent aussi leur connexion.

Comment faire ? puis-je cr=E9er un socket et r=E9cup=E9rer une connexion
existante ? si oui je pourrais la laisser ouverte . Mais l=E0 , si je ne
d=E9connecte pas je me retrouve avec plein de connexions.


Quelqu'un peut-il m'expliquer ?


Merci beaucoup.

Pendloup

4 réponses

Avatar
Dominique Vaufreydaz
Bonjour,

J'ai un moteur de communication multitaches qui envoie et recoit des
données. Chaque thread peut établir une connexion sur un serveur ftp
via un socket qui lui est propre. Mon pb est que n threads se
connectent sur le même serveur. Or quand l'un d' entre eux ferme sa
connexion, les autres peuvent être perturbés, c'est à dire qu'ils
perdent aussi leur connexion.



Eux... C'est bizarre ca. C'est codé comment ? J'ai deja ecrit un
grabber web multithread et chacun vivait sa vie sans voir les autres...

Comment faire ? puis-je créer un socket et récupérer une connexion
existante ? si oui je pourrais la laisser ouverte . Mais là , si je ne
déconnecte pas je me retrouve avec plein de connexions.



Non, si tu veux que les histoires des uns emmerdent pas celle des autres,
le plus prudent est de faire 1 connexion complete par thread. Plus
propre, plus sur. Meme si en creusant le protocol FTP on doit pouvoir
faire mieux.

Doms.
Avatar
Pendloup
Bonjour,

Dominique Vaufreydaz a écrit :

Eux... C'est bizarre ca. C'est codé comment ? J'ai deja ecrit un
grabber web multithread et chacun vivait sa vie sans voir les autres. ..



A partir du moment où chaque thread crée son propre socket, je ne
vois pas pourquoi
la déconnexion d'un socket peut déconnecter les autres. Ce que j'ai
constaté, c'est que quand ça se produite la fonction
WSAGetLastError() appellée après recv() me retourne WSAEWOULDBLOCK .
Plus aucune donnée n'arrive et rien ne me dit que je suis
déconnecté. J'ai donc instauré un time-out, et je repasse par une
phase de reconnexion. Mais ça ne me semble pas normale.

Non, si tu veux que les histoires des uns emmerdent pas celle des aut res,
le plus prudent est de faire 1 connexion complete par thread. Plus
propre, plus sur. Meme si en creusant le protocol FTP on doit pouvoir
faire mieux.



Je suis d'accord. D'autant que j'ai testé avec 2 occurences d' une
application que j'ai et qui se connectent sur le même serveur, et bien
la déconnexion de l'une n'affecte pas l'autre. Voici la séquence que
j'utilise pour me déconnecter :

send(m_socket,"Quitrn",6,0);

shutdown(m_socket, 2);
closesocket(m_socket);


Est-ce que ça explique quelques chose ?
Avatar
Dominique Vaufreydaz
Bonjour,

A partir du moment où chaque thread crée son propre socket, je ne
vois pas pourquoi
la déconnexion d'un socket peut déconnecter les autres. Ce que j'ai
constaté, c'est que quand ça se produite la fonction
WSAGetLastError() appellée après recv() me retourne WSAEWOULDBLOCK .



après un recv qui renvoit SOCKET_ERROR ? Si non, cette valeur
n'indique rien...

Plus aucune donnée n'arrive et rien ne me dit que je suis
déconnecté. J'ai donc instauré un time-out, et je repasse par une
phase de reconnexion. Mais ça ne me semble pas normale.
Est-ce que ça explique quelques chose ?



A mon avis, faut creuser le proto FTP. Y'a un truc que tu dois
pas faire correctement qui lui fait fermer la connexion...

Doms.
Avatar
Pendloup
Bonjour ,

Dominique Vaufreydaz a écrit :

après un recv qui renvoit SOCKET_ERROR ? Si non, cette valeur
n'indique rien...



Oui, et je n'ai plus rien qui arrive . Ce qui m'étonne, c'est que
je boucle sur cet état, sans jamais avoir un autre message d'erreur,
ce qui qui semble vouloir dire que je suis toujours connecté.

A mon avis, faut creuser le proto FTP. Y'a un truc que tu dois
pas faire correctement qui lui fait fermer la connexion...




Bon je vais creuser , merci pour ton aide.


Cordialement,

Pendloup