while (1) { my $remote_paddr = accept(my $remote_socket, SERVER_SOCK); if (!defined(my $pid = fork)) { die "cannot fork: $!"; } elsif ($pid) { next; } # Do some processing, my $myserver = DBIx::MyServer::DBI->new( socket => $remote_socket, dbh => $dbh, banner => $0.' '.join(' ', @ARGV)); # Now launching another child process as, while(1){ if (!defined(my $pid = fork)) { die "cannot fork: $!"; } elsif ($pid) { next; } # Do some processing, # exit second child process _exit(0); } # Exiting the first child process exit; }