Показать сообщение отдельно

помогите подправить демон на perl'e
  #1  
Старый 19.05.2009, 18:13
Аватар для malik555
malik555
Участник форума
Регистрация: 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;
 
Ответить с цитированием