package Catalyst::Engine::HTTP::Daemon;
use strict;
-use base 'Catalyst::Engine::LWP';
+use base 'Catalyst::Engine::HTTP::Base';
-use IO::Socket qw(AF_INET);
+use IO::Socket qw(AF_INET INADDR_ANY SOCK_STREAM SOMAXCONN);
=head1 NAME
#!/usr/bin/perl -w
- BEGIN {
- $ENV{CATALYST_ENGINE} = 'HTTP::Daemon';
- }
+ BEGIN { $ENV{CATALYST_ENGINE} = 'HTTP::Daemon' }
use strict;
use lib '/path/to/MyApp/lib';
=head1 OVERLOADED METHODS
-This class overloads some methods from C<Catalyst::Engine::LWP>.
+This class overloads some methods from C<Catalyst::Engine::HTTP::Base>.
=over 4
my $class = shift;
my $port = shift || 3000;
- my $daemon = Catalyst::Engine::HTTP::Daemon::Catalyst->new(
+ my $daemon = Catalyst::Engine::HTTP::Catalyst->new(
+ Listen => SOMAXCONN,
LocalPort => $port,
- ReuseAddr => 1
+ ReuseAddr => 1,
+ Type => SOCK_STREAM,
);
unless ($daemon) {
die("Failed to create daemon: $!\n");
}
- printf( "You can connect to your server at %s\n", $daemon->url );
+ my $base = URI->new( $daemon->url )->canonical;
+
+ printf( "You can connect to your server at %s\n", $base );
while ( my $connection = $daemon->accept ) {
+ $connection->timeout(5);
+
while ( my $request = $connection->get_request ) {
$request->uri->scheme('http'); # Force URI::http
+ $request->uri->host( $request->header('Host') || $base->host );
+ $request->uri->port( $base->port );
+
+ my $hostname = gethostbyaddr( $connection->peeraddr, AF_INET );
- my $lwp = Catalyst::Engine::LWP::HTTP->new(
- request => $request,
+ my $http = Catalyst::Engine::HTTP::Base::struct->new(
address => $connection->peerhost,
- hostname => gethostbyaddr( $connection->peeraddr, AF_INET )
+ hostname => $hostname || $connection->peerhost,
+ request => $request,
+ response => HTTP::Response->new
);
- $class->handler($lwp);
- $connection->send_response( $lwp->response );
+ $class->handler($http);
+ $connection->send_response( $http->response );
+
}
$connection->close;
=head1 SEE ALSO
-L<Catalyst>, L<HTTP::Daemon>.
+L<Catalyst>, L<Catalyst::Engine>, L<Catalyst::Engine::HTTP::Base>,
+L<HTTP::Daemon>.
=head1 AUTHOR
=cut
-package Catalyst::Engine::HTTP::Daemon::Catalyst;
+package Catalyst::Engine::HTTP::Catalyst;
use strict;
use base 'HTTP::Daemon';