[Cascavel-pm] Socket

Marco A P D'Andrade mdacwb em gmail.com
Segunda Janeiro 10 00:30:50 PST 2011


Dependendo de sua necessidade, valerá mais a pena seguir a sugestão do
Alexei...

Mas como vc citou o caminho do "fazer com as proprias mãos", sugiro entender
as funções abaixo:
- sysread do modulo SOAP::Transport::TCP::Client
- handle do módulo  SOAP::Transport::TCP::Server

Ambos na URL:

http://cpansearch.perl.org/src/MKUTTER/SOAP-Lite-0.712/lib/SOAP/Transport/TCP.pm

Eu utilizei muito isto por volta de 2003, mas estou meio enferrujado. Se não
me engano a função select retornava o filehandle que teria algo para ler ou
escrever.

Mas estou sem acesso ao código em que eu trabalhei no momento.

A grosso modo, a sensação de travamento é pelo fato de entrar em uma leitura
em modo blocking, sem ter nada a receber.

Em resumo.

Quando você usa o codigo "$data = <$new_sock>;", ficará aguardando alguma
informação, mas com buffer vazio, este aguardo será infinito.


Meus 2 minutos ;)

Marco Antonio




Em 18 de dezembro de 2010 10:09, Agnaldo Macedo <
agnaldo em starweb-software.com.br> escreveu:

>
> 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);
> _______________________________________________
> Cascavel-pm mailing list
> Cascavel-pm em pm.org
> http://mail.pm.org/mailman/listinfo/cascavel-pm
>
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/cascavel-pm/attachments/20110110/6a7f0a4f/attachment-0001.html>


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