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,21 +98,11 @@ sub new
|
||||
message_list => [],
|
||||
};
|
||||
|
||||
eval {
|
||||
require IO::Socket::IP;
|
||||
my $s = IO::Socket::IP->new(
|
||||
LocalAddr => "::1",
|
||||
LocalPort => 0,
|
||||
Listen=>1,
|
||||
);
|
||||
$s or die "\n";
|
||||
$s->close();
|
||||
};
|
||||
if ($@ eq "") {
|
||||
# IO::Socket::IP supports IPv6 and is in the core modules list
|
||||
$IP_factory = sub { IO::Socket::IP->new(@_); };
|
||||
$have_IPv6 = 1;
|
||||
} else {
|
||||
# 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 {
|
||||
require IO::Socket::INET6;
|
||||
my $s = IO::Socket::INET6->new(
|
||||
@@ -124,14 +114,23 @@ sub new
|
||||
$s->close();
|
||||
};
|
||||
if ($@ eq "") {
|
||||
# IO::Socket::INET6 supports IPv6 but isn't on the core modules list
|
||||
# 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;
|
||||
} else {
|
||||
# IO::Socket::INET doesn't support IPv6 but is a fallback in case
|
||||
# we have no other.
|
||||
eval {
|
||||
require IO::Socket::IP;
|
||||
my $s = IO::Socket::IP->new(
|
||||
LocalAddr => "::1",
|
||||
LocalPort => 0,
|
||||
Listen=>1,
|
||||
);
|
||||
$s or die "\n";
|
||||
$s->close();
|
||||
};
|
||||
if ($@ eq "") {
|
||||
$IP_factory = sub { IO::Socket::IP->new(@_); };
|
||||
$have_IPv6 = 1;
|
||||
} else {
|
||||
$IP_factory = sub { IO::Socket::INET->new(@_); };
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user