
19.05.2009, 18:13
|
|
Участник форума
Регистрация: 04.02.2009
Сообщений: 132
Провел на форуме: 350627
Репутация:
1
|
|
помогите подправить демон на perl'e
Всем привет !
Запускаю даемон - но он после первого конекта - просто падает на сервере !
Задача даемона ответить клиенту переменной $mes и оборвать конект !
PHP код:
#!/usr/bin/perl use POSIX; use Errno; use IO::Socket; use IO::Select; use Tie::RefHash (); my $DaemonPort = 843; #-- Порт, по которому происходит подключение my $min_login_length = 3; #-- Минимальная длина имени my $shutdown = 0; tie %logins, 'Tie::RefHash'; tie %in_buf, 'Tie::RefHash'; my (%out_buf, $TIME); close STDIN; close STDERR; fork && exit; $|=1; my $server = IO::Socket::INET->new(LocalPort => $DaemonPort, Listen => 10 ) or die "Can't make server socket: $@n"; my $select = IO::Select->new($server); while (! $shutdown) { foreach my $client ($select->can_read(0.1)) { #-- Принимаем информацию от клиентов if($client == $server){ #-- Новый клиент $client = $server->accept(); $client->autoflush(1); $select->add($client); print "da\n"; } else { print "no\n"; $mes = '<?xml version="1.0"?><cross-domain-policy><allow-access-from domain="*" to-ports="*" /></cross-domain-policy>'; $out_buf{$client} .= $mes; } } foreach my $client ($select->can_write(0.1)) { next unless exists $out_buf{$client}; my $rv = $client->send("".$out_buf{$client}.chr(0), 0); unless (defined $rv) { next; } if ($rv == length($out_buf{$client})+1 or Errno::EINPROGRESS == $! or Errno::EWOULDBLOCK ) {#-- Удалим тот кусок данных, что клиент удачно получил substr($out_buf{$client}, 0, $rv) = ''; delete $out_buf{$client} unless length($out_buf{$client}); } else { next; } } }#- shutdown $server->close(); exit;
|
|
|