The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl

use strict;
use warnings;
use IO::Socket::INET;
use IO::Socket::SSL;

my $ppid = $$;
END { print "[$$] ", $$==$ppid ? "ppid ":"", "exit\n" };
print "[$$] ppid started\n";

$SIG{__WARN__} = sub { print "[$$] $_[0]" };
$SIG{__DIE__}  = sub { print "[$$] $_[0]"; exit 0 };

my $class = $ENV{ca_use_ssl} ? "IO::Socket::SSL" : "IO::Socket::INET";
my $port  = $ENV{ca_use_ssl} ? 19794 : 19795;

my @pids;
for( 1 .. 5 ) {
    if( my $pid = fork ) {
        push @pids, $pid;

    } else {
        print "[$$] start\n";
        my $sock = $class->new(PeerAddr=>"localhost:$port", Timeout=>2) or die "couldn't bind: $@";
        while( my $line = $sock->getline ) {
            print "[$$] $line";
        }

        my $eof = ($sock->eof() ? "EOF" : "...");
        my $ced = ($sock->connected() ? "CONNECTED" : "...");

        my $time = time;
        print "[$$] time: $time; eof: $eof; ced: $ced\n";
        exit 0;
    }
}

waitpid( $_, 0 ) for @pids;