2010-11-23 13 views
0

Ich habe einen blockierenden Client/Server lokal über Winsock verbunden. Der Client verwendet Firefox, um Daten von Websites abzurufen und bestimmte Daten zur weiteren Verarbeitung an den Server weiterzuleiten. Der Server antwortet immer und die Verarbeitung kann zwischen 1/10 Sekunden und einigen Minuten dauern. Der Client hat keine Winsock-Verbindung zu etwas anderem als dem Server. Alle Web-Daten werden per Firefox auf die Festplatte geladen.Können Winsock-Verbindungen zufällig fehlschlagen?

Diese Einstellung funktioniert ziemlich gut, bis, scheinbar zufällig, der recv rec des Clients -1 (SOCKET_ERROR) mit Fehlercode 10054 (WSAECONNRESET) zurückgibt. Dies bedeutet, dass der Server die Verbindung angeblich beendet hat, aber der Server wartet tatsächlich noch auf das Empfangen, als ob nichts falsch wäre. Die Verbindung ist auf diese Weise bereits nach 5 Minuten in oder nach dem Arbeiten für so lange wie etwa anderthalb Stunden gescheitert. Der Client sendet ungefähr 10 verschiedene Arten von Anfragen an den Server, und bei einer Vielzahl von Anfragen ist ein Fehler aufgetreten. Die Häufigkeit der Anfragen ist ungefähr konstant, wahrscheinlich im Durchschnitt 10-15 pro Minute. Wenn die Verbindung unterbrochen wird, treten bei keinem Computer Probleme mit dem Internet auf, und der Remote-Desktop wird nicht getrennt.

Anfangs dachte ich, Speicherlecks, aber nach umfangreichen Debugging bin ich ziemlich sicher, dass nicht mehr existieren. Firefox ist manchmal mit beträchtlichem HTTP-Verkehr beschäftigt, also dachte ich, dass das vielleicht den verfügbaren Socket-Pufferraum oder etwas anderes füllen würde - scheint zweifelhaft, aber an diesem Punkt bin ich mir wirklich nicht sicher. Könnte es mehr Speicherlecks, vielleicht einen versteckten Pufferüberlauf, zu viel Webverkehr geben? Was bewirkt, dass meine Winsock-App zufällig fehlschlägt?

+1

In der Computer-Software ist nichts zufällig. Es gibt einen Grund für alles. –

+0

Rechts. Ich denke, ich hätte klarstellen sollen, dass ich durch Zufall gemeint habe, dass ich nicht in der Lage bin, konsequent zu reproduzieren oder einen Grund dafür zu finden. – rotanimod

+1

Wie komplex ist das Netzwerk zwischen Client und Server? Vielleicht fällt eine Zwischenverbindung? – wallyk

Antwort

2

Klingt wie eine Firewall bei der Arbeit.

Viele Firewalls sind so konfiguriert, dass sie inaktive Verbindungen beenden (d. H. Offene TCP-Sitzungen, für die eine Weile keine Daten übertragen werden). Vor allem, wenn es sich um eine HTTP-Verbindung handelt, die normalerweise nicht persistent ist.