diff --git a/lib/Starman/Server.pm b/lib/Starman/Server.pm index c2c6d77..f5dd496 100644 --- a/lib/Starman/Server.pm +++ b/lib/Starman/Server.pm @@ -185,6 +185,7 @@ sub post_accept_hook { headerbuf => '', inputbuf => '', keepalive => 1, + keepalive_requests => 0, }; } @@ -216,6 +217,9 @@ sub process_request { # Read until we see all headers last if !$self->_read_headers; + $self->{client}->{keepalive_requests} += 1; + $self->{server}->{requests} += 1 if $self->{client}->{keepalive_requests} > 1; + my $env = { REMOTE_ADDR => $self->{server}->{peeraddr}, REMOTE_HOST => $self->{server}->{peerhost} || $self->{server}->{peeraddr}, @@ -322,6 +326,8 @@ sub process_request { } } + last if $self->max_requests_reached; + DEBUG && warn "[$$] Waiting on previous connection for keep-alive request...\n"; my $sel = IO::Select->new($conn); @@ -516,7 +522,7 @@ sub _finalize_response { } # Should we keep the connection open? - if ( $self->{client}->{keepalive} ) { + if ( $self->{client}->{keepalive} && !$self->max_requests_reached ) { push @headers, 'Connection: keep-alive'; } else { push @headers, 'Connection: close'; @@ -586,4 +592,9 @@ sub post_client_connection_hook { } } +sub max_requests_reached { + my $self = shift; + return $self->{server}->{requests} >= $self->{server}->{max_requests}; +} + 1;