QTcpSocket Bug?? Netzwerkkabel entfernen wird nicht erkannt!

Alles rund um die Programmierung mit Qt
Antworten
jackmack
Beiträge: 13
Registriert: 1. Juni 2010 10:51

QTcpSocket Bug?? Netzwerkkabel entfernen wird nicht erkannt!

Beitrag von jackmack »

Hallo zusammen,

ich teste gerade ne Server/Client Sache mit QTcpServer/QTcpSocket.

Wichtig ist mir, dass wenn die Verbindung abbricht, meine App dass auch sauber mitbekommt.

Aber schon der einfachste Fall, einfach das Netzwerkkabel entfernen am Client PC wird auf Serverseite von der QTcpSocket Instanz nicht erkannt.

Auch kann ich die Option KEEPALIVE setzen, aber die bringt gar nix.
Der Fehler QAbstractSocket::NetworkError beschreibt genau dies was ich mache. Aber gemeldet wird er nicht.
Ach, und ziehe ich das Kabel am Server PC, dann kommt: "The remote host closed the connection".

Komisch, oder? Ist das nen Bug vielleicht?
Wie soll ich da ne sichere Verbindung herstellen können, vor allem wenn diese mal abgebrochen ist und wieder aufgebaut werden soll??!!

Nen "heartbeat" telegramm verwenden geht schon, aber ich würde erwarten dass Verb.abbrüche auf TCP/IP Ebene erkannt werden sollen und nicht auf Benutzerebene.

Irgendwelche Erfahrungen?
RavenIV
Beiträge: 267
Registriert: 21. Januar 2009 14:24
Wohnort: Waldshut

Re: QTcpSocket Bug?? Netzwerkkabel entfernen wird nicht erka

Beitrag von RavenIV »

jackmack hat geschrieben: Nen "heartbeat" telegramm verwenden geht schon, aber ich würde erwarten dass Verb.abbrüche auf TCP/IP Ebene erkannt werden sollen und nicht auf Benutzerebene.
Die TCP/IP-Ebene ist dafür nicht zuständig.
Sie macht Einpacken/Auspacken in IP- und TCP-Protokoll und sorgt dafür, dass die Pakete in der richtigen Reihenfolge bei höheren Ebenen ankommen und dafür dass keine Pakete verloren gehen.

Verbindungsabbrüche nuss die Hardware-Ebene erkennen.

Schau Dir dazu das ISO/OSI-Model an.
Linux, das längste Text-Adventure aller Zeiten
jackmack
Beiträge: 13
Registriert: 1. Juni 2010 10:51

Beitrag von jackmack »

Ich kenn das ISO/OSI-Modell.

Wohl aber Trolltech nicht. Wieso bieten sie Methoden an, die nicht das liefern was sie vorgeben??

Wozu dann das ganze QAbstractSocket::SocketState/SocketError ??

Nen Tipp, wie ich als Server die Hardware auf Clientseite prüfen kann?
Am besten wohl über das Netzwerk-Kabel... aber das ist ausgesteckt!

Merkste was?! :cry:
ScyllaIllciz
Beiträge: 200
Registriert: 9. Juli 2010 19:31

Beitrag von ScyllaIllciz »

Ich denke das Problem ist der TCP keep alive timeout, der standardmäßig auf 7200s (2h) eingestellt ist. Somit wird erst nach 2 Studen erkannt ob das Kabel/Verbindung weg ist. Wie man das unter Linux einstellen kann siehe hier. Wie das unter Windows geht weiss ich nicht. Aber für diese Einstellungen des TCP/IP Stack kann Nokia/Trolltech nichts ;-)

Scylla

[edit]
hab für Windows noch was gefunden siehe hier
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Das wurde vor kurzem erst auf qt-interest diskutiert: http://lists.trolltech.com/pipermail/qt ... 25865.html
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Antworten