Arriba
view release on metacpan or search on metacpan
lib/Arriba/Server.pm view on Meta::CPAN
package Arriba::Server;
use warnings;
use strict;
use base 'Net::Server::PreFork';
use HTTP::Date;
use HTTP::Status qw(status_message);
use HTTP::Parser::XS qw(parse_http_request);
use IO::Socket::SSL;
use Plack::Util;
use Plack::TempBuffer;
use constant DEBUG => $ENV{ARRIBA_DEBUG};
use constant CHUNKSIZE => 64 * 1024;
my $null_io = do { open my $io, "<", \""; $io };
use Net::Server::SIG qw(register_sig);
# Override Net::Server's HUP handling - just restart all the workers and that's
# about it
sub sig_hup {
my $self = shift;
$self->hup_children;
}
sub run {
my ($self, $app, $options) = @_;
$self->{app} = $app;
$self->{options} = $options;
my %extra = ();
if ($options->{pid}) {
$extra{pid_file} = $options->{pid};
}
if ($options->{daemonize}) {
$extra{setsid} = $extra{background} = 1;
}
if ($options->{ssl_cert}) {
$extra{SSL_cert_file} = $options->{ssl_cert};
}
if ($options->{ssl_key}) {
$extra{SSL_key_file} = $options->{ssl_key};
}
if (!exists $options->{keepalive}) {
$options->{keepalive} = 1;
}
if (!exists $options->{keepalive_timeout}) {
$options->{keepalive_timeout} = 1;
}
my @port;
for my $listen (@{$options->{listen} || [ "$options->{host}:$options->{port}" ]}) {
my %listen;
if ($listen =~ /:/) {
my($h, $p, $opt) = split /:/, $listen, 3;
$listen{host} = $h if $h;
$listen{port} = $p;
$listen{proto} = 'ssl' if 'ssl' eq lc $opt;
}
else {
%listen = (
host => 'localhost',
port => $listen,
proto => 'unix',
);
}
( run in 2.671 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )