Ich habe eine relativ kleine Anwendung geschrieben, die aus einem Server- und einem Client-Teil besteht, die untereinander Daten austauschen, beides Win32-Anwendungen, verbunden via wsock32.
Um das folgende Problem zu beheben habe ich vorübergehend mal ALLES aus dem Programm entfernt was stören könnte.
Ich habe die beide Teile, also Server und Client so umkonfiguriert, dass sowohl der Server als auch der Client bei mir auf meinem Heim-PC laufen, sich via "localhost" miteinander verbinden und den Datentransfer habe ich so weit reduziert, dass die nur noch Ping-Pong spielen, also von beiden Seiten alle 10 Sekunden je ein Datenpaket mit 6 Byte senden um einen Timeout am Socket zu verhindern, sprich das Ganze funktioniert auch dann noch wenn mein PC gar nicht am Internet hängt.
Seeeehr unregelmässig, aber doch mit Sicherheit irgendwann, mal nach 10 Minuten, mal erst nach 10 Stunden bricht nun die Verbindung ab.
WSAGetLastError() gibt auf dem Client 10053 aus, was soviel heisst wie Verbindung vom Server beendet.
Am Server gibt es überhaupt keinen Error, sondern da kommt recv() mit einer 0 zurück, was ebenfalls soviel bedeutet wie, Verbindung wurde am anderen Ende beendet.
Im Web gibt es ein paar Leute die dasselbe Problem haben, aber sämtliche Antworten drunter behaupten immer nur, da muss die Verbindung regulär beendet worden sein, ist sie bei mir aber nicht, ganz sicher nicht, denn sonst würde das Ganze nicht einmal 10 Stunden laufen und beim nächsten Mal nur 10 oder 20 Minuten.
Als ganz wilden Testversuch habe ich nu eine Funktion eingebaut, die alle 10 Minuten die Verbindung erneuert, mit Hilfe eines zweiten Ports.
Der Datentransfer wird angehalten, eine neue Socketverbindung auf dem jeweils anderen Port aufgebaut, der alte Socket wird geschlossen, der neue Socket wird den Threads mitgeteilt und dann wird der Datentransfer auf dem neuen Socket inkl. anderem Port fortsetzt, halt auch nur wieder Ping-Pong.
Auf die Art spring die Verbindung alle 10 Minuten zwischen den beiden Ports hin und zurück.
Hilft aber auch nicht, obwohl die Verbindung in diesem Fall nie länger als 10 Minuten steht und der Wechsel vom einem Port zum Anderen prima klappt, bricht immer noch die Verbindung genauso oft ab wie vorher, mal nach 10 Minuten, mal nach mehreren Stunden.
Ich habe das Problem mittlerweile so weit eingekreist, dass IMMER zuerst im recv() am Server die 0 zurück kommt, IMMER ohne WSA Error und der Client erst danach die Verbindung verliert.
Hat Jemand eine Idee dazu?
Um das folgende Problem zu beheben habe ich vorübergehend mal ALLES aus dem Programm entfernt was stören könnte.
Ich habe die beide Teile, also Server und Client so umkonfiguriert, dass sowohl der Server als auch der Client bei mir auf meinem Heim-PC laufen, sich via "localhost" miteinander verbinden und den Datentransfer habe ich so weit reduziert, dass die nur noch Ping-Pong spielen, also von beiden Seiten alle 10 Sekunden je ein Datenpaket mit 6 Byte senden um einen Timeout am Socket zu verhindern, sprich das Ganze funktioniert auch dann noch wenn mein PC gar nicht am Internet hängt.
Seeeehr unregelmässig, aber doch mit Sicherheit irgendwann, mal nach 10 Minuten, mal erst nach 10 Stunden bricht nun die Verbindung ab.
WSAGetLastError() gibt auf dem Client 10053 aus, was soviel heisst wie Verbindung vom Server beendet.
Am Server gibt es überhaupt keinen Error, sondern da kommt recv() mit einer 0 zurück, was ebenfalls soviel bedeutet wie, Verbindung wurde am anderen Ende beendet.
Im Web gibt es ein paar Leute die dasselbe Problem haben, aber sämtliche Antworten drunter behaupten immer nur, da muss die Verbindung regulär beendet worden sein, ist sie bei mir aber nicht, ganz sicher nicht, denn sonst würde das Ganze nicht einmal 10 Stunden laufen und beim nächsten Mal nur 10 oder 20 Minuten.
Als ganz wilden Testversuch habe ich nu eine Funktion eingebaut, die alle 10 Minuten die Verbindung erneuert, mit Hilfe eines zweiten Ports.
Der Datentransfer wird angehalten, eine neue Socketverbindung auf dem jeweils anderen Port aufgebaut, der alte Socket wird geschlossen, der neue Socket wird den Threads mitgeteilt und dann wird der Datentransfer auf dem neuen Socket inkl. anderem Port fortsetzt, halt auch nur wieder Ping-Pong.
Auf die Art spring die Verbindung alle 10 Minuten zwischen den beiden Ports hin und zurück.
Hilft aber auch nicht, obwohl die Verbindung in diesem Fall nie länger als 10 Minuten steht und der Wechsel vom einem Port zum Anderen prima klappt, bricht immer noch die Verbindung genauso oft ab wie vorher, mal nach 10 Minuten, mal nach mehreren Stunden.
Ich habe das Problem mittlerweile so weit eingekreist, dass IMMER zuerst im recv() am Server die 0 zurück kommt, IMMER ohne WSA Error und der Client erst danach die Verbindung verliert.
Hat Jemand eine Idee dazu?