use IO::Socket::INET ();
use IO::Select ();
-# For PAR
-require Catalyst::Engine::HTTP::Restarter;
-require Catalyst::Engine::HTTP::Restarter::Watcher;
-
use constant CHUNKSIZE => 64 * 1024;
use constant DEBUG => $ENV{CATALYST_HTTP_DEBUG} || 0;
# 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
) {
# Prepend the headers if they have not yet been sent
if ( $self->_has_header_buf ) {
$self->_warn_on_write_error(
- $self->$orig($self->_clear_header_buf)
+ $self->$orig($c, $self->_clear_header_buf)
);
}
use Config;
$ENV{PERL5LIB} .= join $Config{path_sep}, @INC;
- exec $^X, $0, @{ $options->{argv} };
+ exec $^X, $0, @{ $options->{argv} || [] };
}
exit;
while (1) {
my ( $path, $query_string ) = split /\?/, $uri, 2;
+ # URI is not the same as path. Remove scheme, domain name and port from it
+ $path =~ s{^https?://[^/?#]+}{};
+
# Initialize CGI environment
local %ENV = (
PATH_INFO => $path || '',
peeraddr => $iaddr
? ( inet_ntoa($iaddr) || '127.0.0.1' )
: '127.0.0.1',
- localname => gethostbyaddr( $localiaddr, AF_INET ) || 'localhost',
+ 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