use vars qw(@ISA);
use strict;
use Net::Server::PreFork;
use IO::Socket;
@ISA = qw(Net::Server::PreFork);
main->run();
exit;
$|=1;
sub configure_hook {
my $self = shift;
$self->{addr} = 'localhost'; $self->{port} = 20203; $self->{failed} = 0; $self->{hits} = 0; $self->{max_hits} = 1000; $self->{time_begin} = time; $self->{sleep} = 0; }
sub pre_bind {}
sub bind { shift()->log(2,"Running under pid $$\n") }
sub accept { 1 }
sub post_accept {}
sub get_client_info {}
sub allow_deny { 1 }
sub post_process_request {}
sub process_request {
my $self = shift;
sleep($self->{sleep}) if $self->{sleep};
if( $self->{remote} = IO::Socket::INET->new(PeerAddr => $self->{addr},
PeerPort => $self->{port},
Proto => 'tcp') ){
$self->load();
return;
}
*_WRITE = $self->{server}->{_WRITE};
_WRITE->autoflush(1);
print _WRITE "failed [$!]\n";
}
sub load {
my $self = shift;
my $handle = $self->{remote};
$handle->autoflush(1);
my $line = <$handle>;
print $handle "quit\n";
}
sub parent_read_hook {
my $self = shift;
my $status = shift;
if( $status =~ /failed/i ){
$self->{failed}++;
print $status;
$self->{hits}--;
}
return '' unless $status =~/processing/i;
print "*" unless $self->{hits} % 100;
return '' unless ++$self->{hits} >= $self->{max_hits};
$self->{time_end} = time;
$self->print_report();
return 1;
}
sub print_report {
my $self = shift;
my $time = $self->{time_end} - $self->{time_begin};
print "\n$0 Results\n";
print "--------------------------------------------\n";
print "($self->{hits}) hits in ($time) seconds\n";
print "($self->{failed}) failed hits\n";
printf "%.3f hits per second\n", ($time ? $self->{hits}/$time : $self->{hits});
}