send -> error -> Netzwerkkabel wurde gezogen ... wie kann ich das erkennen ?
-
Hallo,
Da ich mit WSAGetLastError() arbeite gehört das nach WIN-API

So mein schnuckeigger *töftöf*
Client ...Also der Knecht sendet und sendet und sendet, der Server schluckt das ganze, doch wenn ich das Netzwerkkabel ziehe kommt bei beiden err:10054 was auch kommt, wenn der Server oder Client auflegt/Socket schließt.
Im Endefekt weiß zwar der Client/Server das es sich nicht gehört dem jeweils anderen das Wort zu verbieten, und die Schlußfolgerung wäre das OMA-BARON mit der Gehhilfe übers Netzwerkkabel gestolpert ist, doch hat das eine mit dem anderen nichts zu tun.
Ich möchte ne Ausschrift bringen Verbindung unterbrochen ... [Gegenstelle aufgelegt | Verbindung wurde getrennt ].
Das PRG soll später mal auf nen MDA eingesetzt werden und wenn ich in ein Funkloch fahre, möchte ich schon wissen, ob ich gleich nach Hause fahren kann
um OMA-BARON aufzuhelfen oder in Ruhe den nächtsen Funkmasten suchen muß ...Ich weiß mir so recht keinen Rat und weil OMA keine Ahnung hat muß ich mal hier im Hülfe bütten ...
MfG
RB
-
Du bekommst ja den Error korrekt geliefert? Wenn du den bekommst gibst du aus "Verbindung unterbrochen, prüfen Sie ob die Netzwerkverbindung noch besteht!" oder something like that.
MfG SideWinder
-
hallo,
Du hast ja Recht, nur ist mir jetzt mal nochwas aufgefallen.
Ich habe einen "Server" und einen "Client", beides Konsolenprogramme.
Server wartet bis kleint was sendet und dann wartet er wieder.Server wird auf WinXP gestartet und der Client auf Win98SE
Client legt auf -> Server zeigt err=0 // ok
Client wird abgeschossen -> Server zeigt err=-1 LastError() == 10054 // ok
Netzwerkabel wird gezogen -> Server zeigt nach 5 - 10 Sekunden err=-1 LastError() == 10054
Client sendet nach dem Server Abgeschossen oder Netzwerkabel gezogen -> LastError() == 10054 // ok
Client sendet nach dem Server Abgeschossen oder Netzwerkabel gezogen -> gesendete Bytes = 33 // Warum das denn ? ( Also die Anzahl der Bytes ist korrekt, doch konnte in Wirklichkeit nichts gesendet werden !Server wird auf Win989SE gestartet und der Client auf WinXP
Client legt auf -> Server zeigt err=0 // ok
Client wird abgeschossen -> Server zeigt err=-1 LastError() == 10054 // ok
Netzwerkabel wird gezogen -> Server bleibt bis in alle Ewigkeit auf Recv stehen // Warum das denn ?
Client sendet nach dem Server Abgeschossen oder Netzwerkabel gezogen -> LastError() == 10054Mir stellt sich ein Bild dar, als ob bei Win98SE die Sockets irgendwie träger
oder ebend in diesem bestimmten Fall fehlerhaft reagieren, was wiederum nicht an den Sockets selber, sondern evtl. mit Netzwerkkarte oder Netzwerkeinstellungen zu tun hat.Was könnte die Ursache diesem Fehlerbild sein ?
( Wenn das NW-Kabel einmal gezogen wurde und wieder angesteckt, wird der Win98SE-Rechner auch erst nach einem Neustart(Win98SE) vom XP-Rechner gefunden bzw. Netzlaufwerke hergestellt werden. )
MfG
RB
-
Definier in Deinem Protokoll (was Du ja sicherlich hast) auch eine Nachricht a la "ich lege jetzt auf!".
Das sendest Du immer kurz vorem disconnect.Kommt nun ein Disconnect OHNE diese Ankündigung, ist's ein OMA-Problem...

-
Hallo Hepi,
Ja, richtig, so kann ich es machen. Aber ich habe mal nen "Techniker" gefragt und der meinte, das ist ein Problem von Win98, daß nicht durchgereicht wird, wenn das NW-Kabel gezogen wird.
Das "Protokoll" sieht nicht vor, daß der Server oder Client jemals auflegt !
Es ist eine Verbindung über Tage hinweg. Es soll ebend nur angezeigt werden am Server, wenn das Kabel gezogen wurde und das geht nur wenn der Server auf XP läuft, nicht auf Win98. Damit kann ich mich noch anfreunden.
Was eine Katastrophe ist, wenn der Win98 Rechner sendet und sagt er habe x-Bytes gesendet, obwohl das NW-Kabel gezogen ist !
Nur wenn der Client auf 98 sehr viele Bytes sendet, kommt irgendwann mal err: 10054. Bis dahin sind aber ne Menge Bytes als erfolgreich versendet verloren gegangen.
Ich habe natürlich ein select vor send und prüfe ob auf dem Socket geschrieben werden kann, aber selbst hier wird gesagt, "Senden möglich".
Ich könnte mal probieren ein NOP-Kommando einzuführen und wenn nach 1000mal NOP
der Server nicht regiert, muß die Verbindung neu hergestllt werden. Andernfalls wäre nach dem ersten NOP eine Antwort vom Server da.Oder ebend mit TimeOuts arbeiten.
MfG
RB