--- lib/SNMP_Session.pm.orig Fri Nov 21 05:25:17 2008 +++ lib/SNMP_Session.pm Fri May 3 13:11:57 2013 @@ -144,9 +144,8 @@ BEGIN { $SNMP_Session::ipv6available = 0; $dont_wait_flags = 0; - if (eval {local $SIG{__DIE__};require Socket6;} && - eval {local $SIG{__DIE__};require IO::Socket::INET6; IO::Socket::INET6->VERSION("1.26");}) { - import Socket6; + if (eval {local $SIG{__DIE__};require IO::Socket::INET6; IO::Socket::INET6->VERSION("1.26");}) { + Socket->import(qw(getaddrinfo inet_pton inet_ntop)); $ipv6_addr_len = length(pack_sockaddr_in6(161, inet_pton(AF_INET6(), "::1"))); $SNMP_Session::ipv6available = 1; } @@ -605,7 +604,7 @@ use Carp; BEGIN { if($SNMP_Session::ipv6available) { import IO::Socket::INET6; - import Socket6; + Socket->import(qw(getaddrinfo inet_pton inet_ntop)); } } @@ -659,13 +658,13 @@ sub open { $remote_hostname = $1; } - my (@res, $socktype_tmp, $proto_tmp, $canonname_tmp); - @res = getaddrinfo($remote_hostname, $port, AF_UNSPEC, SOCK_DGRAM); - ($sockfamily, $socktype_tmp, $proto_tmp, $remote_addr, $canonname_tmp) = @res; - if (scalar(@res) < 5) { - return $this->error_return ("can't resolve \"$remote_hostname\" to IPv6 address"); - } - + my ($err, @res) = getaddrinfo($remote_hostname, $port, {socktype => SOCK_DGRAM}); + return $this->error_return ("can't resolve \"$remote_hostname\" to IPv6 address - $err") if ($err); + # XXX only looks at first address returned + # XXX this should actually cycle through them + my $ai = shift @res; + $sockfamily = $ai->{family}; + $remote_addr = $ai->{addr}; if ($SNMP_Session::recycle_socket && exists $the_socket{$sockfamily}) { $socket = $the_socket{$sockfamily}; } elsif ($sockfamily == AF_INET) {