При использовании следующего, но также и при использовании аналогичного кода с IO :: Socket :: INET у меня возникают проблемы с принятием новых подключений после отключения клиента.
Кажется, что родитель перестает разветвлять новых детей, пока все предыдущие дети не закончатся / отключатся.Однако соединение принято.
Кто-нибудь имеет представление о том, что я делаю неправильно.
#!/usr/bin/perl -w
use Socket;
use POSIX qw(:sys_wait_h);
sub REAPER {
1 until (-1 == waitpid(-1, WNOHANG));
$SIG{CHLD} = \&REAPER;
}
$SIG{CHLD} = \&REAPER;
$server_port=1977;
socket(SERVER, PF_INET, SOCK_STREAM, getprotobyname('tcp'));
setsockopt(SERVER, SOL_SOCKET, SO_REUSEADDR, 1);
$my_addr = sockaddr_in($server_port, INADDR_ANY);
bind(SERVER, $my_addr)
or die "Couldn't bind to port $server_port : $!\n";
listen(SERVER, SOMAXCONN)
or die "Couldn't listen on port $server_port : $!\n";
print("[$$] STARTED\n");
while (accept(CLIENT, SERVER))
{
next if $pid = fork;
die "fork: $!" unless defined $pid;
close(SERVER);
print("[$$] CONNECTED\n");
while(<CLIENT>)
{
print("[$$] $_\n");
}
print("[$$] EXIT\n");
exit;
}
continue
{
close(CLIENT);
}
print("[$$] ENDED\n");