# Forking server use IO::Socket; use POSIX; sub REAPER { my $stiff; while( $stiff=waitpid(-1,WNOHANG)>0) { } $SIG{CHLD}=\&REAPER; } $SIG{CHLD} = \&REAPER; $main_sock = new IO::Socket::INET (LocalHost => 'localhost', LocalPort => 7070, Listen => 5, Proto => 'tcp', Reuse => 1, ); die "Error: $!\n" unless ($main_sock); while ($new_sock = $main_sock->accept()) { $pid = fork(); die "Cannot fork: $!" unless defined($pid); if ($pid == 0) { # Child process while (defined($buf = <$new_sock>)) { # do something with $buf .... print $new_sock "You said: $buf\n"; } exit(0); # Child process exits when it is done. } else { # Close new socket in the parent $new_sock->close; } } close ($main_sock); #### $sigset=POSIX::SigSet->new(SIGCHLD); $sigaction=POSIX::SigAction->new('main::REAPER', $sigset, &POSIX::SA_RESTART); $osigact=POSIX::SigAction->new; sigaction(SIGCHLD, $sigaction, $osigact);