Nachdem ich mein Heimnetz (bzw. Teile davon) auf IPv6-Only umgestellt hatte, stellte ich fest dass presenced nicht mehr richtig funktionierte.
Die Ursache war schnell gefunden - presenced öffnet seinen Socket nur auf IPv4
Hier ein kleiner Patch um presenced auf IPv6 umzustellen - ich bin in Perl nicht fit genug um "beides" einzubauen, aber vielleicht findet sich ja jemand...
*** presenced 2022-01-25 14:31:21.881377164 +0100
--- /usr/sbin/presenced 2022-01-25 10:19:14.629447486 +0100
***************
*** 29,34 ****
--- 29,35 ----
use IO::Socket;
+ use IO::Socket::IP -register;
use IO::Select;
use File::Basename;
use Getopt::Long;
***************
*** 118,127 ****
print PIDFILE $$."\n";
close PIDFILE;
! $server = new IO::Socket::INET (
LocalPort => $opt_p,
Proto => 'tcp',
Listen => 5,
Reuse => 1,
Type => SOCK_STREAM,
KeepAlive => 1,
--- 119,131 ----
print PIDFILE $$."\n";
close PIDFILE;
! $server = new IO::Socket::IP (
LocalPort => $opt_p,
Proto => 'tcp',
+ Domain => PF_INET6,
+ V6Only => 1,
Listen => 5,
+ LocalHost => "::0",
Reuse => 1,
Type => SOCK_STREAM,
KeepAlive => 1,
Collectord muss ich mir noch anschauen, hat aber wohl ein ähnliches Problem...
Hier ein Patch für collectord - ganz happy bin ich noch nicht damit, ab und zu startet er nicht...
diff --git a/collectord b/collectord
index 7612c09..59f67a8 100755
--- a/collectord
+++ b/collectord
@@ -29,6 +29,7 @@
use IO::Socket;
+use IO::Socket::IP -register;
use IO::Select;
use POSIX;
#use Data::Dumper;
@@ -164,7 +165,7 @@ open(PIDFILE, ">$opt_P");
print PIDFILE $$."\n";
close PIDFILE;
-$server = new IO::Socket::INET (
+$server = new IO::Socket::IP (
LocalPort => $opt_p,
Proto => 'tcp',
Listen => 5,
@@ -505,7 +506,7 @@ sub doQuery($$$)
my $previous_state = "absence";
my $current_state = "absence";
- $client_socket = new IO::Socket::INET (
+ $client_socket = new IO::Socket::IP (
PeerHost => $values{address},
PeerPort => $values{port},
Proto => 'tcp',
@@ -592,7 +593,7 @@ sub doQuery($$$)
}
# now try to re-establish the connection
- $client_socket = new IO::Socket::INET (
+ $client_socket = new IO::Socket::IP (
PeerHost => $values{address},
PeerPort => $values{port},
Proto => 'tcp',