[Cascavel-pm] Socket

Agnaldo Macedo agnaldo em starweb-software.com.br
Sábado Dezembro 18 04:09:10 PST 2010


Olá pessoal.

Tenho uma programa que recebe conexões via scoket (o código esta abaixo).
Meu problema é que nesse ponto
      print "Aguardando ...";
      my $new_sock = $sock->accept();
      print "Processando ...";
      my $data = '';
      $data = <$new_sock>;
      print "Dados recebidos ...";
às vezes, por motivo de "alguma coisa" no client que faz a conexão, ele 
trava.
Eu fico com e mensagem de "Processando ..." na tela.
Ou seja, na instrução
      $data = <$new_sock>;
ele fica lendo, lendo, lendo e não chega ao final.
Não sei se é falta de algum "byte" finalizado da mensagem, ou se apenas 
problema de time out e ele fica esperando.
Teria algo que eu pudesse "quebrar" a conexão e seguir adiante, sem ficar 
preso ali.



use warnings;
use strict;
use IO::Socket;

$| = 1;

my $sock = IO::Socket::INET->new (LocalPort => 8010, Type => SOCK_STREAM, 
timeout => 120, Proto => 'tcp', Listen => 50);
unless ($sock) { die "Servidor não pode ser criado" }
print "Servidor iniciado\n";

my $continua = 'SIM';
while ($continua eq 'SIM')
   {
      print "Aguardando ...";
      my $new_sock = $sock->accept();
      print "Processando ...";
      my $data = '';
      $data = <$new_sock>;
      print "Dados recebidos ...";

      if ($data)
             {
                print "Dados disponiveis ...\n";
             }
         else
             {
                print "Nada a processar!\n";
             }
      close ($new_sock);
   }
close($sock);
exit(0); 



Mais detalhes sobre a lista de discussão Cascavel-pm