diff --git a/util/TLSProxy/Proxy.pm b/util/TLSProxy/Proxy.pm index 45871b874..9883901b9 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(@_); }; } }