File Coverage

blib/lib/Plack/Handler/Feersum/SS.pm
Criterion Covered Total %
statement 24 45 53.3
branch 0 18 0.0
condition 0 8 0.0
subroutine 8 9 88.8
pod n/a
total 32 80 40.0


line stmt bran cond sub pod time code
1             # ABSTRACT: Server::Starter adapter for Feersum Plack handler
2             package Plack::Handler::Feersum::SS;
3             $Plack::Handler::Feersum::SS::VERSION = '0.05';
4 1     1   138039 use strict;
  1         3  
  1         43  
5 1     1   15 use warnings;
  1         2  
  1         105  
6 1     1   8 use base 'Plack::Handler::Feersum';
  1         3  
  1         885  
7 1     1   63872 use Feersum;
  1         5  
  1         56  
8 1     1   929 use Server::Starter 'server_ports';
  1         11699  
  1         90  
9 1     1   10 use Carp 'croak';
  1         2  
  1         90  
10 1     1   9 use Symbol 'geniosym';
  1         2  
  1         78  
11 1     1   12 use Fcntl qw'F_GETFL F_SETFL O_NONBLOCK';
  1         3  
  1         597  
12              
13             # redefining (origins: Feersum::Runner, Plack::Handler::Feersum)
14             sub _prepare {
15 0     0     my $self = shift;
16 0 0         delete $self->{quiet} if delete $self->{verbose};
17 0           my %ports = %{server_ports()};
  0            
18 0 0         croak "Feersum doesn't support none/multiple listen directives yet" unless %ports == 1;
19 0           my ($port, $fd) = each %ports;
20 0 0         open(my $sock = geniosym, "<&=", $fd) || croak $!;
21 0 0         my $flags = fcntl($sock, F_GETFL, 0) or croak $!;
22 0 0         fcntl($sock, F_SETFL, $flags | O_NONBLOCK) || croak $!;
23 0 0         print "Feersum [$$] listening on $port fd=$fd\n" unless $self->{quiet};
24 0           $self->{sock} = $sock;
25 0           $self->{listen} = [$port];
26 0           my $f = $self->{endjinn} = Feersum->endjinn;
27 0           $f->use_socket($sock);
28 0 0         if (my $opts = $self->{options}) {
29 0           $self->{$_} = delete $opts->{$_} for grep $opts->{$_}, qw/pre_fork keepalive read_timeout max_connection_reqs/;
30             }
31 0   0       $f->set_keepalive($_) for grep defined && $f->can('set_keepalive'), delete $self->{keepalive};
32 0   0       $f->max_connection_reqs($_) for grep defined && $f->can('max_connection_reqs'), delete $self->{max_connection_reqs};
33 0           $f->read_timeout($_) for grep $_, delete $self->{read_timeout};
34             $self->{server_ready}->({
35             qw'server_software Feersum',
36             $port =~ m/^(?:(.+?):|)([0-9]+)$/ ? (host => $1//0, port => $2) : (host => 'unix/', port => $port)
37 0 0 0       }) if $self->{server_ready};
    0          
38 0           return;
39             }
40              
41             1;