FHEM Forum

FHEM - Entwicklung => Wunschliste => Thema gestartet von: hjgode am 03 Januar 2017, 07:52:49

Titel: Verbesserungsvorschlag: socket keep alive
Beitrag von: hjgode am 03 Januar 2017, 07:52:49
Hallo

da unter anderem MYSENSORS Netzwerk gateways nicht besonders gesprächig sind, fällt deren Ausfall (Netzwerkverbindung tot) möglicherweise erst sehr spät auf. Die Standard-Werte für KeepAlive sind unter Unix sehr hoch gewählt und nachdem ein Socket geöffnet ist, wird das erste KeepAlive Paket erst nach zwei Stunden gesendet.

Deshalb mein Vorschlag die Socket Optionen anzupassen:

--- DevIo.pm.org        2017-01-03 07:16:26.302041479 +0100
+++ DevIo.pm    2017-01-03 07:27:41.400313025 +0100
@@ -322,6 +322,12 @@
         delete($hash->{NEXT_OPEN});
         $conn->setsockopt(SOL_SOCKET, SO_KEEPALIVE, 1) if(defined($conn));

+        #adjust keep_alive strategy for this socket connection
+        #with linux the defaults are too large (seconds and retries): KEEPIDLE=7200 (2 hours!), KEEPINTVL=75, KEEPCNT=9
+        $conn->setsockopt(IPPROTO_TCP, TCP_KEEPIDLE,  300); #seconds to wait before first keep_alive packet send
+        $conn->setsockopt(IPPROTO_TCP, TCP_KEEPINTVL,  75); #seconds interval between keep_alive packets after first packet
+        $conn->setsockopt(IPPROTO_TCP, TCP_KEEPCNT,    3); #attempts before conn is considered being broken
+
       } else {
         Log3 $name, 3, "Can't connect to $dev: $!" if(!$reopen && $!);
         $readyfnlist{"$name.$dev"} = $hash;


Was haltet Ihr davon?

~Josef