Verbesserungsvorschlag: socket keep alive

Begonnen von hjgode, 03 Januar 2017, 07:52:49

Vorheriges Thema - Nächstes Thema

hjgode

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
Debian SID mit aktuellem FHEM, nanoCUL 866, JeeLink EC3000, fhemduino, SIGNALduino,
3 x TFA TH Sensor, 1 x TFA TH Arduino Sender, 3 x EC3000, 4 x Elro Schaltsteckdosen, ESA2000
offline: Wibo Funkthermostat, 2 x ELV Funkthermostat FHT80, 2 FS20 ST4 Funksteckdose