X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FEngine%2FHTTP.pm;h=97cd8d618abc6a4ba56274351fd4a499f407a100;hb=d44d2d8fc4e14e827edd55383a801f81c7ae87cf;hp=6b0bc122b26a0f141cfc400f5101c585fabb2de7;hpb=3317f661135adb540baf551803dc16ba4bd5920b;p=catagits%2FCatalyst-Runtime.git diff --git a/lib/Catalyst/Engine/HTTP.pm b/lib/Catalyst/Engine/HTTP.pm index 6b0bc12..97cd8d6 100644 --- a/lib/Catalyst/Engine/HTTP.pm +++ b/lib/Catalyst/Engine/HTTP.pm @@ -68,7 +68,8 @@ sub finalize_headers { # Should we keep the connection open? my $connection = $c->request->header('Connection'); - if ( $self->options->{keepalive} + if ( $self->options + && $self->options->{keepalive} && $connection && $connection =~ /^keep-alive$/i ) { @@ -534,12 +535,21 @@ sub _socket_data { peeraddr => $iaddr ? ( inet_ntoa($iaddr) || '127.0.0.1' ) : '127.0.0.1', - localname => inet_ntoa($localiaddr) || '127.0.0.1', + localname => _gethostbyaddr( $localiaddr ), + localaddr => inet_ntoa($localiaddr) || '127.0.0.1', }; return $data; } +{ # If you have a crappy DNS server then these can be slow, so cache 'em + my %hostname_cache; + sub _gethostbyaddr { + my $ip = shift; + $hostname_cache{$ip} ||= gethostbyaddr( $ip, AF_INET ) || 'localhost'; + } +} + sub _inet_addr { unpack "N*", inet_aton( $_[0] ) } =head2 options