Commit 98ac876f authored by Richard Levitte's avatar Richard Levitte
Browse files

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: default avatarViktor Dukhovni <viktor@openssl.org>
parent c8d1c9b0
Loading
Loading
Loading
Loading
+11 −12
Original line number Diff line number Diff line
@@ -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(@_); };
        }
    }