Seite 1 von 1

QTcpSocket Bug?? Netzwerkkabel entfernen wird nicht erkannt!

Verfasst: 23. Juli 2010 11:32
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?

Re: QTcpSocket Bug?? Netzwerkkabel entfernen wird nicht erka

Verfasst: 23. Juli 2010 11:44
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.

Verfasst: 23. Juli 2010 14:09
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:

Verfasst: 23. Juli 2010 14:35
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

Verfasst: 23. Juli 2010 15:23
von Christian81
Das wurde vor kurzem erst auf qt-interest diskutiert: http://lists.trolltech.com/pipermail/qt ... 25865.html