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=e937fb193cf09894657850ea0a2dc51e14283289;hp=52314f3f59f5c126c36ff3ddb16b7d1c6d44c166;hb=3b1178b01f1d71618f6a52357ec91ab40e2fc5e3;hpb=919d925775d88b7d1bcb5550a782a48250dff32e diff --git a/lib/Catalyst/Request.pm b/lib/Catalyst/Request.pm index 52314f3..e937fb1 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_NAMEREQD NIx_NOSERV ); use Carp; use utf8; use URI::http; @@ -439,7 +439,21 @@ 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}, + NI_NAMEREQD, + # we are only interested in the hostname, not the servicename + NIx_NOSERV + ); + return $err ? $self->address : $hostname; }, );