package SOAP::Transport::HTTP::Daemon::ForkOnAccept;
use strict;
use vars qw(@ISA);
use SOAP::Transport::HTTP;
# Idea and implementation of Michael Douglass
@ISA = qw(SOAP::Transport::HTTP::Daemon);
sub handle {
my $self = shift->new;
CLIENT:
while (my $c = $self->accept) {
my $pid = fork();
# We are going to close the new connection on one of two conditions
# 1. The fork failed ($pid is undefined)
# 2. We are the parent ($pid != 0)
unless( defined $pid && $pid == 0 ) {
$c->close;
next;
}
# From this point on, we are the child.
$self->close; # Close the listening socket (always done in children)
# Handle requests as they come in
while (my $r = $c->get_request) {
$self->request($r);
$self->SOAP::Transport::HTTP::Server::handle;
$c->send_response($self->response);
}
$c->close;
return;
}
}
1;