X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Runtime.git;a=blobdiff_plain;f=lib%2FCatalyst%2FRequest.pm;h=19e7331d189af72bde4710c1edf4376bbf8f3cf7;hp=1306b94f2dee59251d1a7e20dc66eadae1854ce5;hb=b24c7ffe9aeb2bfd9aeb4e217a5e1741ec555b0a;hpb=59e4fb5d7e98d588779a88e791af881ad8e953df diff --git a/lib/Catalyst/Request.pm b/lib/Catalyst/Request.pm index 1306b94..19e7331 100644 --- a/lib/Catalyst/Request.pm +++ b/lib/Catalyst/Request.pm @@ -1,6 +1,6 @@ package Catalyst::Request; -use IO::Socket qw[AF_INET inet_aton]; +use Socket qw( getaddrinfo getnameinfo AI_NUMERICHOST NI_DGRAM NIx_NOSERV ); use Carp; use utf8; use URI::http; @@ -436,7 +436,20 @@ has hostname => ( lazy => 1, default => sub { my ($self) = @_; - gethostbyaddr( inet_aton( $self->address ), AF_INET ) || $self->address + my ( $err, $sockaddr ) = getaddrinfo( + $self->address, + # no service + '', + { flags => AI_NUMERICHOST } + ); + return $self->address + if $err; + ( $err, my $hostname ) = getnameinfo( + $sockaddr->{addr}, + # we are only interested in the hostname, not the servicename + NI_DGRAM|NIx_NOSERV + ); + return $err ? $self->address : $hostname; }, );