Dependendo de sua necessidade, valerá mais a pena seguir a sugestão do Alexei...<br><br>Mas como vc citou o caminho do "fazer com as proprias mãos", sugiro entender as funções abaixo:<br>- sysread do modulo SOAP::Transport::TCP::Client<br>
- handle do módulo SOAP::Transport::TCP::Server<br><br>Ambos na URL:<br> <a href="http://cpansearch.perl.org/src/MKUTTER/SOAP-Lite-0.712/lib/SOAP/Transport/TCP.pm">http://cpansearch.perl.org/src/MKUTTER/SOAP-Lite-0.712/lib/SOAP/Transport/TCP.pm</a><br>
<br>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.<br><br>Mas estou sem acesso ao código em que eu trabalhei no momento.<br>
<br>A grosso modo, a sensação de travamento é pelo fato de entrar em uma leitura em modo blocking, sem ter nada a receber.<br><br>Em resumo.<br><br>Quando você usa o codigo "$data = <$new_sock>;", ficará aguardando alguma informação, mas com buffer vazio, este aguardo será infinito.<br>
<br><br>Meus 2 minutos ;)<br><br>Marco Antonio<br>
<br><br><br><br><div class="gmail_quote">Em 18 de dezembro de 2010 10:09, Agnaldo Macedo <span dir="ltr"><<a href="mailto:agnaldo@starweb-software.com.br">agnaldo@starweb-software.com.br</a>></span> escreveu:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<br>
Olá pessoal.<br>
<br>
Tenho uma programa que recebe conexões via scoket (o código esta abaixo).<br>
Meu problema é que nesse ponto<br>
print "Aguardando ...";<br>
my $new_sock = $sock->accept();<br>
print "Processando ...";<br>
my $data = '';<br>
$data = <$new_sock>;<br>
print "Dados recebidos ...";<br>
às vezes, por motivo de "alguma coisa" no client que faz a conexão, ele trava.<br>
Eu fico com e mensagem de "Processando ..." na tela.<br>
Ou seja, na instrução<br>
$data = <$new_sock>;<br>
ele fica lendo, lendo, lendo e não chega ao final.<br>
Não sei se é falta de algum "byte" finalizado da mensagem, ou se apenas problema de time out e ele fica esperando.<br>
Teria algo que eu pudesse "quebrar" a conexão e seguir adiante, sem ficar preso ali.<br>
<br>
<br>
<br>
use warnings;<br>
use strict;<br>
use IO::Socket;<br>
<br>
$| = 1;<br>
<br>
my $sock = IO::Socket::INET->new (LocalPort => 8010, Type => SOCK_STREAM, timeout => 120, Proto => 'tcp', Listen => 50);<br>
unless ($sock) { die "Servidor não pode ser criado" }<br>
print "Servidor iniciado\n";<br>
<br>
my $continua = 'SIM';<br>
while ($continua eq 'SIM')<br>
{<br>
print "Aguardando ...";<br>
my $new_sock = $sock->accept();<br>
print "Processando ...";<br>
my $data = '';<br>
$data = <$new_sock>;<br>
print "Dados recebidos ...";<br>
<br>
if ($data)<br>
{<br>
print "Dados disponiveis ...\n";<br>
}<br>
else<br>
{<br>
print "Nada a processar!\n";<br>
}<br>
close ($new_sock);<br>
}<br>
close($sock);<br>
exit(0); <br>
_______________________________________________<br>
Cascavel-pm mailing list<br>
<a href="mailto:Cascavel-pm@pm.org" target="_blank">Cascavel-pm@pm.org</a><br>
<a href="http://mail.pm.org/mailman/listinfo/cascavel-pm" target="_blank">http://mail.pm.org/mailman/listinfo/cascavel-pm</a><br>
</blockquote></div><br>