use sigtrap('handler' => \&SignalHandler, 'HUP', 'TERM'); use sigtrap('handler' => \&ChildExited, 'CHLD', 'PIPE'); use IO::Socket; use constant UXSOCKADDR => '/tmp/ux-sock-uds'; use constant GREETINGS => 'This is ux-server. a reversing ohce!'."\n"; my $childs = {}; # Hash-Referenz mit ProcessIDs der Kindprozesse my $sock = undef; my $conn = undef; sub SignalHandler { my $signal = shift; print('caught signal ', $signal, "\n"); } sub ChildExited { my $chldpid = wait(); print('close fork ', $chldpid, "\n"); delete $childs->{$chldpid}; } unlink(UXSOCKADDR); $sock = IO::Socket::UNIX->new( 'Local' => UXSOCKADDR, 'Type' => SOCK_STREAM, 'Listen' => 5, ) or die('Fehler bei Erstellen des UNIX-Sockets: ', $!); while ($conn = $sock->accept()) { my $pid = fork; if (!defined $pid) { die('Fehler bei fork: ', $!); } else { if ($pid > 0) { $childs->{$pid} = 1; } else { print($conn GREETINGS); while (defined(my $stream = <$conn>)) { chomp($stream); print($conn scalar(reverse($stream)), "\n"); } # HIER SOLL DER FORK SICH BEENDEN } } }