X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FRequest.pm;h=53aa8cadc6ae3df41c23a55fbc227cf1d5675536;hb=c6d8ce6415e613f9456cbb84df96b3364ddead0d;hp=1306b94f2dee59251d1a7e20dc66eadae1854ce5;hpb=efc1a69b1e03a40bc721aa745846d45f855b9511;p=catagits%2FCatalyst-Runtime.git diff --git a/lib/Catalyst/Request.pm b/lib/Catalyst/Request.pm index 1306b94..53aa8ca 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; @@ -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}, + NI_NAMEREQD, + # 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; }, );