Thursday 25th September 2008
Local Packages
Updated perl-IO-Socket-INET6 to 2.55
I found that the test suite for this package failed on Fedora 9 and Rawhide.
+ make test TEST_VERBOSE=1 PERL_DL_NONLAZY=1 /usr/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(1, 'blib/lib', 'blib/arch')" t/*.t t/configure6........ 1..1 ok 1 - Testing that "sub configure" does not fail ok t/host6............. 1..4 ok 1 - Checking for sockhost() success Can't call method "peerhost" on an undefined value at t/host6.t line 63. Failed 3/4 subtests Use of uninitialized value $sock in <HANDLE> at t/host6.t line 50. readline() on unopened filehandle at t/host6.t line 50.
It was the same on the previous version, currently in Fedora - the Fedora package has the test suite disabled.
I discovered that in Fedora >= 9, creating sockets bound to ::1 can be unreliable if the address family isn't explicitly set to AF_INET6, and a "bind: invalid argument" error can result. This patch got the test suite working reliably:
--- IO-Socket-INET6-2.54/t/host6.t 2008-02-22 10:59:34.000000000 +0000
+++ IO-Socket-INET6-2.54/t/host6.t 2008-09-25 12:06:01.000000000 +0100
@@ -37,6 +37,7 @@
# some systems seem to need as much as 10,
# so be generous with the timeout
Timeout => 15,
+ Domain => AF_INET6,
) or die "$@";
# TEST
@@ -54,7 +55,7 @@
plan tests => 4;
# child, try various ways to connect
- my $sock = IO::Socket::INET6->new("[::1]:$port");
+ my $sock = IO::Socket::INET6->new(PeerAddr => "[::1]:$port", Domain => AF_INET6) or die "Can't create socket: $@\n";
# TEST
ok ($sockhost, "Checking for sockhost() success");
--- IO-Socket-INET6-2.54/t/io_sock6.t 2008-09-25 12:16:38.000000000 +0100
+++ IO-Socket-INET6-2.54/t/io_sock6.t 2008-09-25 12:30:40.000000000 +0100
@@ -107,7 +107,7 @@
# Test various other ways to create INET sockets that should
# also work.
-$listen = IO::Socket::INET6->new(Listen => '', Timeout => 15) or die "$@";
+$listen = IO::Socket::INET6->new(Listen => '', Timeout => 15, Domain => AF_INET6) or die "$@";
$port = $listen->sockport;
if($pid = fork()) {
@@ -147,7 +147,9 @@
# some machines seem to suffer from a race condition here
sleep(2);
- $sock = IO::Socket::INET6->new("[::1]:$port");
+ # Forcing Domain => AF_INET6 here makes this the same as the next test but
+ # I get "bind: invalid argument" without it...
+ $sock = IO::Socket::INET6->new(PeerAddr => "[::1]:$port", Domain => AF_INET6);
if ($sock) {
$sock->print("ok 10\n");
$sock->print("done\n");I don't know though whether the real problem here is the test suite, Fedora's perl, or something even lower level in Fedora.