diff --git a/lib/POE/Wheel/SocketFactory.pm b/lib/POE/Wheel/SocketFactory.pm index 0504e75..17a97b9 100644 --- a/lib/POE/Wheel/SocketFactory.pm +++ b/lib/POE/Wheel/SocketFactory.pm @@ -52,10 +52,9 @@ sub MY_SOCKET_SELECTED () { 12 } # least compiles. Suggested in rt.cpan.org 27250. BEGIN { - eval { Socket->import( qw(getaddrinfo getnameinfo unpack_sockaddr_in6) ) }; + eval { Socket->import( qw(getaddrinfo unpack_sockaddr_in6) ) }; if ($@) { *getaddrinfo = sub { Carp::confess("Unable to use IPv6: Socket doesn't provide getaddrinfo()") }; - *getnameinfo = sub { Carp::confess("Unable to use IPv6: Socket doesn't provide getnameinfo()") }; *unpack_sockaddr_in6 = sub { Carp::confess("Unable to use IPv6: Socket doesn't provide unpack_sockaddr_in6()") }; } @@ -318,9 +317,10 @@ sub _define_connect_state { # INET6 socket stacks tend not to. elsif ($domain eq DOM_INET6) { if (defined $peer) { - ((my $error), $peer_addr, $peer_port) = getnameinfo($peer); - if ($error) { - warn $error; + eval { + ($peer_port, $peer_addr) = unpack_sockaddr_in6($peer); + }; + if (length $@) { $peer_port = $peer_addr = undef; } } @@ -1547,7 +1547,7 @@ listening or connecting. See below for the differences. For INET sockets, C<$_[ARG1]> and C<$_[ARG2]> hold the socket's remote address and port, respectively. The address is packed; see L<Socket/inet_ntoa> if a human-readable IPv4 address is needed. -L<Socket::GetAddrInfo/getnameinfo> provides numeric addresses for IPv4 +L<Socket/inet_ntop> provides numeric addresses for IPv4 and IPv6 addresses. sub handle_new_client {