tcp keepalive (jabber session disconnects)

M

meeb

Grünschnabel
Hallo

Ich habe einen Jabber Server (jabberd 2.x) im Einsatz zu welchem sich user via VPN verbinden. Das einzige Problem hierbei ist, wenn die VPN Verbindung aus welchen Gründen auch immer abbricht. Am Client Rechner merke ich den Abbruch spätestens wenn ich was senden will oder die automatische Aktivitätsstatus Benachrichtigung an den Server gesendet werden soll. Der Jabberserver bekommt den Verbindungsabbruch aber nicht mit, was zur Folge hat, dass der user mit dem disconnect für alle anderen user noch als online angezeigt wird!!

Jetzt hat jabberd selbst ja eigentlich keine Funktion um tote Verbindungen zu erkennen um den betroffenen user sozusagen offline zu setzten, da er ganz einfach TCP den Handshake überlässt. Ein Acknowledge auf Anwendungsebene gibt es ja nicht. (Es gibt lediglich ein idle timeout, was in dem Zusammenhang aber sinnfrei ist.) Was man noch einstellen kann, ist das Senden von whitespaces an den client in regelmäßigen Abständen. Dies bringt aber auch wenig, da bei einem disconnect (von dem der Server nichts mibekommt) der Socket offen bleibt und alle Nachrichten an den toten Client ganz einfach in die Send queue kommen, und für den jabberd ordnungsgemäß gesendet wurden.

Wenn das alles so stimmt, würde mir als letzte Maßnahme eigentlich nur bleiben, die Werte tcp_keepalive_intvl und tcp_keepalive_probes weit runter zu schrauben, sodass TCP so rasch wie möglich die Socketverbindung für tot erklärt.

Ich habe aber bedenken dies zu tun, weil es Auswirkungen auf den gesamten TCP Verkehr des Servers hat. Hat jemand dazu eine Idee? Hab ich was übersehen bzw. wäre es gefählich besagte Werte so anzupassen, dass der Socket nach sagen wir 30 Sekunden geschlossen wird?
 
ich erlaube mir mal ein /push an der Stelle, vllt hat doch noch wer ne Anregung.
Was ich mir noch denke, wäre doch mit dem idle timeout zu abeiten, aber dann müsste ein Client verwendet werden der in regelmäßigen Abständen zumindest irgendwas sendet, so quasi ein "Pfusch - alive paket" ^^ Gibts sowas? Hat keiner Probs mit Verbindungsabbrüchen und wie diese am besten gehandelt werden könnten?
 

Ähnliche Themen

Server und Client für TCP und UDP

CentOS 6.3 RADIUS - Keine Verbindung möglich

Bei PostgreSQL als anderer als der angemeldete Nutzer verbinden - Wo liegt der Fehler

Zurück
Oben