以下のコードは、TCPリクエストを受信したときに新しいプロセスをフォークするTCP Serverを実行します。最初のリクエストが受け入れられた直後に、なぜ終了するのですか?Perl TCP socket progammingに関する質問
#!/usr/bin/perl
use Socket;
use POSIX qw(:sys_wait_h);
sub REAPER {
1 until -1 == waitpid(-1, WNOHANG);
$SIG{CHLD} = \&REAPER;
}
$SIG{CHLD} = \&REAPER;
socket(SERVER, PF_INET, SOCK_STREAM, getprotobyname('tcp'));
setsockopt(SERVER, SOL_SOCKET, SO_REUSEADDR, 1);
$my_addr = sockaddr_in(8080, INADDR_ANY);
bind SERVER, $my_addr;
listen(SERVER, 1000);
REQUEST:
while (accept(CLIENT, SERVER)) {
if ($pid = fork) {
close CLIENT;
next REQUEST;
}
die "$!" unless defined $pid;
close SERVER;
print CLIENT "hello\n";
close CLIENT;
exit;
}
私は答えはわかりませんが、私がやるべき最初のことは、システムコールが何であるかを見るためにstraceの下で実行することです。 – araqnid