아래 코드는 TCP 요청을 수신 할 때 새 프로세스를 포크하는 TCP 서버를 실행합니다. 첫 번째 요청을 수락 한 직후에 왜 종료됩니까? accept
는 신호 (SIGCHLD)에 의해 중단됩니다하고 해당 사건을 처리하지 않기 때문에Perl TCP 소켓 프로그래밍에 대한 질문
#!/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