The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package LWP::ConnCache::MaxKeepAliveRequests;
use Moose;
our $VERSION = '0.33';

extends 'LWP::ConnCache';

sub new {
    my ( $class, %args ) = @_;
    my $max_keep_alive_requests = $args{max_keep_alive_requests} || 100;
    delete $args{max_keep_alive_requests};
    my $self = LWP::ConnCache->new(%args);
    $self->{max_keep_alive_requests} = $max_keep_alive_requests;
    bless $self, $class;
    return $self;
}

around 'deposit' => sub {
    my ( $coderef, $self, $type, $key, $conn ) = @_;
    my $max_keep_alive_requests = $self->{max_keep_alive_requests};

    my $keep_alive_requests = ${*$conn}{'myhttp_response_count'};
    if ( $keep_alive_requests < $max_keep_alive_requests ) {
        $coderef->( $self, $type, $key, $conn );
    }
};

1;

__END__

=head1 NAME

LWP::ConnCache::MaxKeepAliveRequests - A connection cache that enforces a max keep alive limit

=head1 SYNOPSIS

  use LWP;
  use LWP::ConnCache::MaxKeepAliveRequests;
  my $ua = LWP::UserAgent->new;
  $ua->conn_cache(
      LWP::ConnCache::MaxKeepAliveRequests->new(
          total_capacity          => 10,
          max_keep_alive_requests => 100,
      )
  );

=head1 DESCRIPTION

L<LWP::UserAgent> is the default module for issuing HTTP requests from
Perl. It has a keep_alive setting which by default allows unlimited
requests to the same server. Some servers will disconnect you after
a limited number of requests (in Apache 2 this is achieved with the
MaxKeepAliveRequests directive). This module allows you to limit
the maximum number of keep alive requests to a server. 

=head1 AUTHOR

Leon Brocard <acme@astray.com>.

=head1 COPYRIGHT

Copyright (C) 2008, Leon Brocard

=head1 LICENSE

This module is free software; you can redistribute it or modify it
under the same terms as Perl itself.