Prefer IO::Socket::INET6 over IO::Socket::IP
While IO::Socket::IP is a core perl module (since Perl v5.19.8, or so says corelist), IO::Socket::INET6 has been around longer, is said to be more widely deployed, and most importantly, seems to have less bugs hitting us. We therefore prefer IO::Socket::INET6, and only fall back to IO::Socket::IP if the former doesn't exist on the local system. Reviewed-by: Viktor Dukhovni <viktor@openssl.org>
This commit is contained in:
@@ -98,9 +98,14 @@ sub new
|
|||||||
message_list => [],
|
message_list => [],
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# IO::Socket::IP is on the core module list, IO::Socket::INET6 isn't.
|
||||||
|
# However, IO::Socket::INET6 is older and is said to be more widely
|
||||||
|
# deployed for the moment, and may have less bugs, so we try the latter
|
||||||
|
# first, then fall back on the code modules. Worst case scenario, we
|
||||||
|
# fall back to IO::Socket::INET, only supports IPv4.
|
||||||
eval {
|
eval {
|
||||||
require IO::Socket::IP;
|
require IO::Socket::INET6;
|
||||||
my $s = IO::Socket::IP->new(
|
my $s = IO::Socket::INET6->new(
|
||||||
LocalAddr => "::1",
|
LocalAddr => "::1",
|
||||||
LocalPort => 0,
|
LocalPort => 0,
|
||||||
Listen=>1,
|
Listen=>1,
|
||||||
@@ -109,13 +114,12 @@ sub new
|
|||||||
$s->close();
|
$s->close();
|
||||||
};
|
};
|
||||||
if ($@ eq "") {
|
if ($@ eq "") {
|
||||||
# IO::Socket::IP supports IPv6 and is in the core modules list
|
$IP_factory = sub { IO::Socket::INET6->new(@_); };
|
||||||
$IP_factory = sub { IO::Socket::IP->new(@_); };
|
|
||||||
$have_IPv6 = 1;
|
$have_IPv6 = 1;
|
||||||
} else {
|
} else {
|
||||||
eval {
|
eval {
|
||||||
require IO::Socket::INET6;
|
require IO::Socket::IP;
|
||||||
my $s = IO::Socket::INET6->new(
|
my $s = IO::Socket::IP->new(
|
||||||
LocalAddr => "::1",
|
LocalAddr => "::1",
|
||||||
LocalPort => 0,
|
LocalPort => 0,
|
||||||
Listen=>1,
|
Listen=>1,
|
||||||
@@ -124,14 +128,9 @@ sub new
|
|||||||
$s->close();
|
$s->close();
|
||||||
};
|
};
|
||||||
if ($@ eq "") {
|
if ($@ eq "") {
|
||||||
# IO::Socket::INET6 supports IPv6 but isn't on the core modules list
|
$IP_factory = sub { IO::Socket::IP->new(@_); };
|
||||||
# However, it's a bit older and said to be more widely deployed
|
|
||||||
# at the time of writing this comment.
|
|
||||||
$IP_factory = sub { IO::Socket::INET6->new(@_); };
|
|
||||||
$have_IPv6 = 1;
|
$have_IPv6 = 1;
|
||||||
} else {
|
} else {
|
||||||
# IO::Socket::INET doesn't support IPv6 but is a fallback in case
|
|
||||||
# we have no other.
|
|
||||||
$IP_factory = sub { IO::Socket::INET->new(@_); };
|
$IP_factory = sub { IO::Socket::INET->new(@_); };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user