Prefer IO::Socket::INET6 over IO::Socket::IP
authorRichard Levitte <levitte@openssl.org>
Sun, 14 Feb 2016 06:10:38 +0000 (07:10 +0100)
committerRichard Levitte <levitte@openssl.org>
Sun, 14 Feb 2016 06:39:23 +0000 (07:39 +0100)
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>
util/TLSProxy/Proxy.pm

index 45871b8..9883901 100644 (file)
@@ -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(@_); };
         }
     }