So, inzwischen bin ich fertig mit meinem ersten eigens geschriebenen Daemon der mit einem Desktop-Client auf UDP-Basis kommuniziert.

(Mag für einige nix besonderes sein, aber ich finds trotzdem toll

)
Nun, so toll nun auch wieder nicht. Also, es funktioniert zwar alles wie ich es gerne hätte und so, aber ein Problem gibts halt doch noch. Und das tritt auf wenn die Ping zwischen Client und Server relativ hoch ist und (vermutlich) auch die Verbindung ziemlich kacke ist. Zum einen bin da ich mit meinem Smartphone/UMTS Internet und ein Tester der irgendwo aus Russland kommt. Wenn ich hingegen mit meinem "normalen" Internet die Verbindung herstelle oder der andere Tester aus Frankreich (ja, wirklich), läuft die Synchronisation zwischen Client und Server tadellos ab.
Das eigentliche Problem ist, dass zum Teil KeepAlive Pakete die der Server als Antwort schickt nicht beim Client ankommen. Die Pakete hingegen die der Client zum Server schickt kommen zu 90% beim Server an. Firewalls und andere Späße traue ich mich auszuschließen, denn auf meinem Smartphone gibt es definitiv keine Firewall und auch mein russischer Tester hat das bereits ausprobiert. Die Pakete kommen aber auch definitiv nicht an. (Mit Wireshark kontrolliert.)
Was ich inzwischen festgestellt habe, aber nicht auf russischer Seite ausprobieren konnte, ist dass es nicht direkt die Ping ist bzw. die Qualität der Leitung (So weit wie ich das eben beurteilen kann) sondern die Zeitspanne zwischen zwei Kontaktaufnahmen. Je höher ich die KeepAlive-Rate einstelle desto eher bekomme ich eine Antwort vom Server, wenn jedoch seltener KeepAlives verschickt werden, tritt das Problem wieder auf. (Jede Minute ein KeepAlive funktioniert, alle fünf Minuten ein KeepAlive funktioniert nicht) Das deckt sich auch mit anderen Arten von Paketen, Pakete die häufiger verschickt werden (können). Logge ich mich relativ zügig ein/aus funktioniert das relativ gut.
Meine Frage ist nun, da hier doch bestimmt der ein oder andere mit ein wenig Erfahrung in dem Bereich rumgeistert, wie ich soetwas am besten kompensiere?
Ich dachte da im ersten Moment daran die KeepAlive-Rate abhängig von der Ping zu definieren. Je höher die Ping, desto höher die KeepAlive-Rate, je niedriger die Ping, desto niedrige die Rate. Aber würde das auf Dauer wirklich etwas bringen?
Ich hab auch schonmal die Größe der Pakete erhöht (von ~60byte auf ~200byte) aber auch das hat nichts gebracht.
Was gibt es noch für Sachen die ich ausprobieren könnte?
Ach und nein ich gebe nicht sofort auf wenn ich auf *ein* Paket keine Antwort erhalte. Bevor ich den Server als nicht erreichbar abstemple versuch ichs weitere zehn Mal innerhalb von 30sek. (D.h. alle 3 Sekunden ein Versuch)