File Coverage

blib/lib/Event/tcplisten.pm
Criterion Covered Total %
statement 27 44 61.3
branch 0 12 0.0
condition 0 4 0.0
subroutine 9 11 81.8
pod 0 1 0.0
total 36 72 50.0


line stmt bran cond sub pod time code
1 1     1   65389 use strict;
  1         3  
  1         40  
2             package Event::tcplisten;
3 1     1   5 use Carp;
  1         2  
  1         229  
4 1     1   910 use Symbol;
  1         1509  
  1         72  
5 1     1   1274 use Socket;
  1         7673  
  1         1850  
6 1     1   12 use Fcntl;
  1         3  
  1         282  
7 1     1   5 use Event 0.50;
  1         30  
  1         9  
8 1     1   822 use Event::Watcher qw(R W T);
  1         2  
  1         76  
9             require Event::io;
10 1     1   5 use base 'Event::io';
  1         2  
  1         94  
11 1     1   5 use vars qw($VERSION);
  1         2  
  1         976  
12             $VERSION = '0.06';
13              
14             'Event::Watcher'->register;
15              
16             sub new {
17 0     0 0   my $class = shift;
18 0           my %arg = @_;
19              
20 0   0       my $port = delete $arg{port} || die "port required";
21 0   0       my $cb = delete $arg{cb} || die "cb required";
22 0 0         for (qw(fd poll)) { carp "$_ ignored" if delete $arg{$_}; }
  0            
23              
24 0           my $proto = getprotobyname('tcp');
25 0 0         socket(my $sock = gensym, PF_INET, SOCK_STREAM, $proto)
26             or die "socket: $!";
27 0 0         setsockopt($sock, SOL_SOCKET, SO_REUSEADDR, pack('l', 1))
28             or die "setsockopt: $!";
29 0 0         bind($sock, sockaddr_in($port, INADDR_ANY)) or die "bind: $!";
30 0 0         listen($sock, SOMAXCONN) or die "listen: $!";
31              
32             $class->SUPER::new(%arg, fd => $sock, poll => R, reentrant => 0,
33             max_cb_tm => 5, cb => sub {
34 0     0     my ($e) = @_;
35 0           my $w=$e->w;
36 0           my $sock = gensym;
37 0 0         accept $sock, $w->fd or return;
38 0           $cb->($w, $sock);
39 0           });
40             }
41              
42             1;
43              
44             __END__