#!/usr/bin/env perl

use strict;
use warnings;

use IO::Select;

my $s = IO::Socket->new( LocalHost => 'localhost',
                         LocalPort => '1234',
                         Proto     => 'tcp',
                         Listen    => 16,
                         Reuse     => 1 );

my $read_set = IO::Select->new;
$read_set->add( $s );

while( 1 ) { 
    my ( $rh_set ) = IO::Select->select( $read_set, undef, undef, 0 );
    
    foreach my $rh ( @$rh_set ) { 
        if ( $rh == $s ) { 
            $read_set->add( $rh->accept );
        } else { 
            my $buf = <$rh>;
            if ( defined $buf ) { 
                print $buf;
            } else { 
                $read_set->remove( $rh );
                close $rh;
            }
        }
    }
}


