$cnt;
}
sub daemon
{
my $self = shift;
${*$self}{'httpd_daemon'};
}
1;
__END__
=head1 NAME
HTTP::Daemon - a simple http server class
=head1 SYNOPSIS
use HTTP::Daemon;
use HTTP::Status;
my $d = HTTP::Daemon->new || die;
print "Please contact me at: <URL:", $d->url, ">\n";
while (my $c = $d->accept) {
while (my $r = $c->get_request) {
if ($r->method eq 'GET' and $r->url->path eq "/xyzzy") {
# remember, this is *not* recommended practice :-)
$c->send_file_response("/etc/passwd");
}
else {
$c->send_error(RC_FORBIDDEN)
}
}
$c->close;
undef($c);
}
=head1 DESCRIPTION
Instances of the C<HTTP::Daemon> class are HTTP/1.1 servers that
listen on a socket for incoming requests. The C<HTTP::Daemon> is a
subclass of C<IO::Socket::INET>, so you can perform socket operations
directly on it too.
The accept() method will return when a connection from a client is
available. The returned value will be an C<HTTP::Daemon::ClientConn>
object which is another C<IO::Socket::INET> subclass. Calling the
get_request() method on this object will read data from the client and
return an C<HTTP::Request> object. The ClientConn object also provide
methods to send back various responses.
This HTTP daemon does not fork(2) for you. Your application, i.e. the
user of the C<HTTP::Daemon> is responsible for forking if that is
desirable. Also note that the user is responsible for generating
responses that conform to the HTTP/1.1 protocol.
The following methods of C<HTTP::Daemon> are new (or enhanced) relative
to the C<IO::Socket::INET> base class:
=over 4
=item $d = HTTP::Daemon->new
=item $d = HTTP::Daemon->new( %opts )
The constructor method takes the same arguments as the
C<IO::Socket::INET> constructor, but unlike its base class it can also
be called without any arguments. The daemon will then set up a listen
queue of 5 connections and allocate some random port number.
A server that wants to bind to some specific address on the standard
HTTP port will be constructed like this:
$d = HTTP::Daemon->new(
LocalAddr => 'www.thisplace.com',
LocalPort => 80,
);
See L<IO::Socket::INET> for a description of other arguments that can
be used configure the daemon during construction.
=item $c = $d->accept
=item $c = $d->accept( $pkg )
=item ($c, $peer_addr) = $d->accept
This method works the same the one provided by the base class, but it
returns an C<HTTP::Daemon::ClientConn> reference by default. If a
package name is provided as argument, then the returned object will be
blessed into the given class. It is probably a good idea to make that
class a subclass of C<HTTP::Daemon::ClientConn>.
The accept method will return C<undef> if timeouts have been enabled
and no connection is made within the given time. The timeout() method
is described in L<IO::Socket>.
=7= |