Hallo,
ich habe mir die Frage gestellt, wie TCPSend() erkennen möchte, ob das Senden erfolgreich war:
Wenn ich TCPSend() aufrufe, dann möchte ich ja sofort im Code weiter laufen - benötige also auch sofort einen Rückgabewert.
Zu diesem Zeitpunkt hat das Senden vielleicht schon geklappt - vielleicht aber auch nicht (TCP wird es ja vermutlich öfters probieren).
Also ausprobieren:
Und tatsächlich: Zum Versuch habe ich eine Verbindung zwischen 2 Rechner aufgebaut und sende alle 500ms ein Zeichen.
Wenn ich nun die Verbindung (WLAN) trenne, dann dauert es ca. 10 - 40s bis der Sender @error meldet.
Warum das so stark schwankt, weiß ich nicht. Konkret heißt das aber, dass ich im Extremfall 40s lang munter Sende, ohne dass es beim Empfänger ankommt - und ohne dass irgendjemand was merkt. So habe ich mir das mit dem TCP nicht vorgestellt.
Den Empfänger kriege ich dazu, dass er über Timeout merkt, dass nichts mehr ankommt und die Verbindung trennt bzw. neu aufbauen möchte - da aber ja keine Verbindung mehr zum Sender besteht, kriegt der das nicht mit und sendet munter weiter, ohne sich zu beklagen.
Erst nach max. 40s gibt es einen Fehler - ich kann eine neue Verbindung aufbauen und alles läuft wieder.
Mich ärgert es aber, dass der Sender nicht mitkriegt, dass zumindest zeitweise nichts ankommt.
Habt ihr eine Idee, was ich da machen kann?
Vielleicht soll der Empfänger einfach zurücksenden, was er empfangen hat - dann könnte ich beim Sender über Timeout erkennen, dass die Verbindung weg ist.
Ich dachte aber, dass TCP bereits sowas hat...