#!/usr/bin/env perl use strict; use warnings; use Data::Dumper; use POSIX; use AnyEvent; use AnyEvent::Handle; use EV; use IO::Socket::INET(); my $socket = IO::Socket::INET->new( Listen => 5, ReuseAddr => 1, LocalPort => 8888, Proto => 'tcp' ); POSIX::setsid(); for my $child_num ( 1 .. 2 ) { my $pid = fork; if( $pid == 0 ) { warn $$, ' CHILD: started'; while( my $client = $socket->accept ) { my $cv = AnyEvent->condvar; $client->autoflush( 1 ); my( $peerhost, $peerport ) = ( $client->peerhost, $client->peerport ); my $handle = AnyEvent::Handle->new( fh => $client, on_drain => sub { warn $$, ' drain '; }, on_error => sub { print "Client connection error: $peerhost:$peerport: $!\n"; $cv->broadcast; }, ); my $read; $read = sub { my( $self, $line ) = @_; warn $$, ' got line ', $line; $self->push_read( line => $read ); }; $handle->push_read( line => $read,); $cv->recv; warn $$, ' $client done.'; } warn 'CHILD: done'; exit; } } while( ( my $pid = wait ) != -1 ) { warn 'REAPED: ', $pid; } warn 'PARENT: done'; exit;