use strict; use warnings; use IO::Socket::INET; use Fcntl; my $pipe_name = './myFIFO'; my $host      = '127.0.0.1'; my $port      = 43600; my @open_ports; my $listener = IO::Socket::INET->new( LocalHost  => $host                                    , LocalPort  => $port                                    , Type       => SOCK_STREAM                                    , Proto      => 'tcp'                                    , Listen     => 10                                    , Reuse      => 1                                    ) or die "can't open socket over port $port"; while (my $client = $listener->accept()) {   chomp (my $request = <$client>);   # wenn @open_ports leer ist, werden die naechsten Ports   # aus der Pipe gelesen...   unless (@open_ports) {      die "pipe $pipe_name is not open" unless -e $pipe_name;      sysopen my $PIPE,$pipe_name,O_RDONLY or die $!;      @open_ports = <$PIPE>;      close $PIPE;   }   # an den Client wird der naechste freie Port gesendet und das   # Array gleichermassen verkuertzt   print $client shift @open_ports;   close $client; } close($listener);