Leser: 3
4 Einträge, 1 Seite |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
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 } } }
MatthiasW+2008-10-16 18:20:02--Der else-Zweig deines ersten if-Statements innerhalb der while-Schleife ist so nicht richtig, da in $pid nicht die richtige Prozessid drinsteht ;)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
my $pid = fork; if (!defined $pid) { die('Fehler bei fork: ', $!); } else { # fork hat funktioniert if ($pid > 0) { # Ich bin der Mutterprozess und hab die PID des Childs } else { # Ich bin der Childprozess und bin "$pid == 0" } }
4 Einträge, 1 Seite |