2010-11-23 8 views
0

J'ai un client/serveur de blocage connecté localement via Winsock. Le client utilise firefox pour extraire des données de sites Web, en transmettant certaines données au serveur pour un traitement supplémentaire. Le serveur répond toujours, et le traitement peut durer de 1/10e seconde à quelques minutes. Le client n'a pas de connexion winsock avec autre chose que le serveur; toutes les données Web sont récupérées sur disque dur via firefox.Les connexions Winsock peuvent-elles échouer de manière aléatoire?

Cette installation fonctionne assez bien jusqu'à ce que, apparemment de manière aléatoire, le client recv renvoie -1 (SOCKET_ERROR) avec le code d'erreur 10054 (WSAECONNRESET). Cela signifie que le serveur a prétendument terminé la connexion, mais le serveur attend toujours de recv comme si rien ne se passait. La connexion a échoué de cette manière dès 5 minutes dans ou après avoir travaillé pendant environ une heure et demie. Le client envoie environ 10 types différents de demandes au serveur, et une panne s'est produite sur une variété d'entre eux. La fréquence des demandes est à peu près constante, probablement une moyenne de 10-15 par minute. Lorsque la connexion est rompue, aucun ordinateur ne rencontre de problèmes Internet et le bureau distant ne se déconnecte pas. Au début, je pensais que les fuites de mémoire, mais après débogage étendu, je suis raisonnablement certain n'existe plus. Firefox est parfois engagé dans un trafic HTTP considérable, donc j'ai pensé que cela pourrait peut-être remplir un espace tampon de socket disponible ou quelque chose - semble douteux mais pour l'instant je ne suis pas vraiment sûr. Donc, pourrait-il y avoir plus de fuites de mémoire, peut-être un dépassement de mémoire tampon caché, trop de trafic Web? Qu'est-ce qui cause l'échec aléatoire de mon application Winsock?

+1

Dans les logiciels informatiques, rien n'est aléatoire. Il y a une raison pour tout. –

+0

Droite. Je suppose que j'aurais dû préciser que par hasard, je voulais dire d'une manière que je suis incapable de reproduire ou de trouver une cause. – rotanimod

+1

Quelle est la complexité du réseau entre le client et le serveur? Peut-être qu'un lien intermédiaire est en train de tomber? – wallyk

Répondre

2

Cela ressemble à un pare-feu au travail.

De nombreux pare-feu sont configurés pour mettre fin à des connexions inactives (c'est-à-dire des sessions TCP ouvertes sur lesquelles aucune donnée n'est transférée pendant un certain temps). Surtout s'il s'agit d'une connexion HTTP, qui n'est généralement pas persistante.

Questions connexes