X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FRequest.pm;h=02d0c13be46d175757f4fa54c2591e56104baae3;hb=85f607cbcb524633954b28ea94a4dd12c89b4778;hp=1306b94f2dee59251d1a7e20dc66eadae1854ce5;hpb=efc1a69b1e03a40bc721aa745846d45f855b9511;p=catagits%2FCatalyst-Runtime.git diff --git a/lib/Catalyst/Request.pm b/lib/Catalyst/Request.pm index 1306b94..02d0c13 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 NIx_NOSERV ); use Carp; use utf8; use URI::http; @@ -432,11 +432,30 @@ sub body { has hostname => ( is => 'rw', - required => 1, 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 } + ); + if ( $err ) { + $self->_log->warn("resolve of hostname failed: $err"); + return $self->address; + } + ( $err, my $hostname ) = getnameinfo( + $sockaddr->{addr}, + 0, + # we are only interested in the hostname, not the servicename + NIx_NOSERV + ); + if ( $err ) { + $self->_log->warn("resolve of hostname failed: $err"); + return $self->address; + } + return $hostname; }, );