Привет всем, возникла следующая проблема. Написал демона, след образом: 1) демонизируемся вот так, и создаем сокет(и тут же перенаравляем std err&out в файлы логов, не пишу для краткости)
| Код | sub daemonize { defined( my $pid = fork() ) or print "$time Cannot fork: $!\n" and return; if ( $pid ) { print "Classifier daemon started.\n"; exit(0); } }
my $sock = IO::Socket::INET->new( LocalPort => '3333', Proto => 'tcp', ReuseAddr => 1, Listen => 1, ) or print "Cannot open socket: $!\n" and exit(1);
|
2) Слушаем сокет и если пришел определенный запрос, что-то там отвечаем, что нам нужно:
| Код | my $working = 1; while ( $working ) { if ( my $client = $sock->accept() ) { my ($input, $answer); $client->recv($input, 1024, 0);
### Если пришел сигнал о шатдауне, выключаемся if ($input =~ /^shutdown/i) { print STDOUT "$time Got shutdown, exiting\n"; $working = 0; }
###Здесь делаем дела с ответом, решаем, что ответить, и отвечаем
print $client line_length($answer), $answer; close $client; } }
|
Вот, собственно такая простая штука. Работает. На 3 сообщения подряд. Дальше $client = $sock->accept() - не выполнется, т.е. в эту ветку уже не входит.
|