victorcoasne
Messages postés1101Date d'inscriptionjeudi 24 avril 2003StatutMembreDernière intervention23 juillet 2023
-
18 juil. 2007 à 00:56
ShareVB
Messages postés2676Date d'inscriptionvendredi 28 juin 2002StatutMembreDernière intervention13 janvier 2016
-
23 juil. 2007 à 19:56
Bonjour,
J'ai fait un proxy qui intègre un serveur WEB et lorsque que je lui demande de s'interroger, je me rends compte qu'il y a une erreur.
Cette erreur dit que la connexion a été réinitialisée par un tiers.
Dans un premier temps on se dit que c'est normal car dans l'en-tête on précise "Connection: close" mais si on interroge un serveur apache aucune erreur.
Le serveur apache va renvoyer une réponse dont le nombre de caractères est nul pour faire comprendre au proxy de clore la connexion (avec toujours le paramètre connection: close dans l'en-tête de la réponse).
Je précise au passage que la réponse, des fois, n'est pas transmis dans son intégralité au client à cause de cette erreur du client. Une erreur d'envoi ne survient pas sur le serveur seulement un erreur de réception sur le serveur.
J'ai essayé d'envoyer une chaine vidée (si on en fait deux c'est le même résultat) :
send(id_de_la_socket, "", 0,0);
mais ça marche à moitié : explications :
Le client reçoit tout et même l'erreur. Donc le problème de cette erreur n'est pas résolu et en plus il ne reçoit pas de vide lui indiquant de fermer la connexion.
Bien entendu je fais un shutdown puis un closesocket côté serveur pour clore la connexion avec le client.
ShareVB
Messages postés2676Date d'inscriptionvendredi 28 juin 2002StatutMembreDernière intervention13 janvier 201626 22 juil. 2007 à 21:26
salut,
la seule chose que je vois c'est que le serveur renvoie la réponse avec une entête Connection: close puis ferme la connexion...à la limite, je veux bien penser que la réponse contient une ligne vide à la fin "\r\n" mais bon...et puis met le flags RST de l'entête TCP à 1 pour dire connection terminée...mais cela n'a rien à voir avec HTTP...
victorcoasne
Messages postés1101Date d'inscriptionjeudi 24 avril 2003StatutMembreDernière intervention23 juillet 20237 23 juil. 2007 à 14:44
Bonjour,
Si tu fais une boucle de réception, en gros ça fait ça :
while (recv[...]>0)
{
[...]
}
if ([...]==SOCKET_ERROR)
{
[...]
}
Avec apache aucune erreur ne se produit et la connexion est bien fermée.
Avec mon proxy l'erreur socket et déclenchée et indique "reset by peer"
Voilà le vrai problème.
Sous Firefox aucun problème mais si j'interoge mon proxy avec une boucle de réception de ce genre il reçoit tout en local et génère une erreur et en réseau il reçoit une partie puis l'erreur.
victorcoasne
Messages postés1101Date d'inscriptionjeudi 24 avril 2003StatutMembreDernière intervention23 juillet 20237 23 juil. 2007 à 14:45
Bonjour,
Biensûr je n'ai pas dit que ça venait forcément de HTTP mais je précise que j'utilise ce protocole.
C'est sûrement des sockets que provient ce problème.
ShareVB
Messages postés2676Date d'inscriptionvendredi 28 juin 2002StatutMembreDernière intervention13 janvier 201626 23 juil. 2007 à 19:56
salut,
à mon avis, en fait, tu fais un algo du genre (je me rappelle plus bien des params et autre valeurs de retour d'erreur) :
while (recv)
{
if (reponse contient "Connection: close")
normal_de_se_prendre_un_conn_close = 1;
if (erreur_recv && errno == "reset by peer")
if (normal_de_se_prendre_un_conn_close)
break; //reset by peer normal
else
show_error();
}