From: Richard Levitte Date: Sun, 14 Feb 2016 06:10:38 +0000 (+0100) Subject: Prefer IO::Socket::INET6 over IO::Socket::IP X-Git-Tag: OpenSSL_1_1_0-pre3~22 X-Git-Url: https://git.openssl.org/?p=openssl.git;a=commitdiff_plain;h=98ac876f2ded90de8c9d9bc9d7b33a965f7d9f9a 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 --- diff --git a/util/TLSProxy/Proxy.pm b/util/TLSProxy/Proxy.pm index 45871b8748..9883901b94 100644 --- a/util/TLSProxy/Proxy.pm +++ b/util/TLSProxy/Proxy.pm @@ -98,9 +98,14 @@ sub new 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 { - require IO::Socket::IP; - my $s = IO::Socket::IP->new( + require IO::Socket::INET6; + my $s = IO::Socket::INET6->new( LocalAddr => "::1", LocalPort => 0, Listen=>1, @@ -109,13 +114,12 @@ sub new $s->close(); }; if ($@ eq "") { - # IO::Socket::IP supports IPv6 and is in the core modules list - $IP_factory = sub { IO::Socket::IP->new(@_); }; + $IP_factory = sub { IO::Socket::INET6->new(@_); }; $have_IPv6 = 1; } else { eval { - require IO::Socket::INET6; - my $s = IO::Socket::INET6->new( + require IO::Socket::IP; + my $s = IO::Socket::IP->new( LocalAddr => "::1", LocalPort => 0, Listen=>1, @@ -124,14 +128,9 @@ 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(@_); }; + $IP_factory = sub { IO::Socket::IP->new(@_); }; $have_IPv6 = 1; } 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(@_); }; } }