Description: Fix _update_peer subroutine to work with IPv6
Origin: vendor
Bug: https://rt.cpan.org/Public/Bug/Display.html?id=79916
Forwarded: not-needed
Author: Salvatore Bonaccorso <carnil@debian.org>
Last-Update: 2012-10-05

---
 SSL.pm |   18 +++++++++++++-----
 1 file changed, 13 insertions(+), 5 deletions(-)

--- a/SSL.pm
+++ b/SSL.pm
@@ -69,11 +69,11 @@
 	my $ip6 = eval {
 	    require Socket;
 	    Socket->VERSION(1.95);
-	    Socket->import( 'inet_pton' );
+	    Socket->import( qw/inet_pton inet_ntop/ );
 	    1;
 	} || eval {
 	    require Socket6;
-	    Socket6->import( 'inet_pton' );
+	    Socket6->import( qw/inet_pton inet_ntop/ );
 	    1;
 	};
 
@@ -525,9 +525,17 @@
 	my $self = shift;
 	my $arg_hash = ${*$self}{'_SSL_arguments'};
 	eval {
-		my ($port,$addr) = sockaddr_in( getpeername( $self ));
-		$arg_hash->{PeerAddr} = inet_ntoa( $addr );
-		$arg_hash->{PeerPort} = $port;
+                my $sockaddr = getpeername( $self );
+                my $af = sockaddr_family($sockaddr);
+                if( $af == AF_INET6 ) {
+                    my ($port, $addr, $scope, $flow ) = unpack_sockaddr_in6( $sockaddr );
+                    $arg_hash->{PeerAddr} = inet_ntop( $af, $addr );
+                    $arg_hash->{PeerPort} = $port;
+                } else {
+                    my ($port,$addr) = sockaddr_in( $sockaddr);
+                    $arg_hash->{PeerAddr} = inet_ntoa( $addr );
+                    $arg_hash->{PeerPort} = $port;
+                }
 	}
 }
 
