INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

TCP Verbindungsabbruch erkennen



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

02.06.2014, 21:14 (Dieser Beitrag wurde zuletzt bearbeitet: 02.06.2014 21:32 von rolfk.)
Beitrag #8

rolfk Offline
LVF-Guru
*****


Beiträge: 2.305
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
RE: TCP Verbindungsabbruch erkennen
(02.06.2014 10:42 )FEL schrieb:  Danke Rolf für die Infos.

Wenn die Socketlibrary ein Telegramm verschickt und keine Antwort (trotz mehrmaliger Sendeversuche) erhält, wird dies doch sicher irgendwo vermerkt? Kann man so etwas nicht abfragen?

Gruß Micha

Nicht direkt. Der Socket liefert dann irgendwann einen Error zurück (vor allem bei einem TCP Read ein beliebiger anderer error dann Timeout) aber die Timeouts dafür in der Socketlibrary sind so lang, dass das im Normalfall fast nie sichtbar wird. Schliesslich soll die Socketlibrary eine TCP Schnittstelle die über ein 300 Baud Serialinterface geht nicht einfach killen, nur weil die Datenübertragung WAHNSINNIG langsam ist.
Also besser um das selber zu machen indem Du halt ein Kommando schickst von dem Du weisst dass da eine Antwort kommen sollte und dann mit kurzem Timeout widerholt versuchen die Antwort zu lesen. Wenn diese nicht innerhalb einer vernünftigen Anzahl Retries kommt, die Verbindung schliessen und wieder neu öffnen. Wenn das Öffnen dann einen Timeout gibt weisst Du endgültig dass dein liebes Device nicht mehr aktiv am Netzwerk ist.

Grundsätzlich gibt es die SO_KEEPALIVE option die man verwenden könnte um das Socket regelmässig ein leeres Keep Alive packet verschicken zu lassen wenn kein anderer Verkehr stattfindet. Die Default settings sind aber etwas lang um ein Verbindungsunterbruch feststellen zu können. Hier ist der MSDN Artikel und es wird auch erwähnt wie man mit WSAIoctl(.., SIO_KEEPALIVE, ...) auch diese Werte veränderen kann, aber das sinnvoll einzustellen ist nicht gerade trivial.

Selber würde ich normalerwise lieber mein eigenes KeepAlive machen mit einem bekannten Kommando/Response.

Rolf Kalbermatter
Technische Universität Delft, Dienst Elektronik und Mechanik
https://blog.kalbermatter.nl
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30
Antwort schreiben 


Nachrichten in diesem Thema
TCP Verbindungsabbruch erkennen - FEL - 26.05.2014, 09:28
RE: TCP Verbindungsabbruch erkennen - rolfk - 02.06.2014 21:14

Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Variant Datentyp automatisch erkennen GT123 2 5.399 08.12.2011 11:32
Letzter Beitrag: GT123

Gehe zu: