<div class="gmail_quote">2010/12/18 Agnaldo Macedo <span dir="ltr"><<a href="mailto:agnaldo@starweb-software.com.br">agnaldo@starweb-software.com.br</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;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>Agnaldo,<div><br></div><div>Pode ser várias coisas. Pode ser TIME_WAIT [1], pode ser limites do SO. Sugiro você dar uma olhada no módulo Net::Server [2] para não ficar reinventado a roda. Ou, extrapolando um pouco, e presumindo o que você pretende fazer com esse código, já ir apra uma solução mais robusta, como algum sistema de messaging. Não mexi ainda com ele, mas o pessoal aqui do Perl tem falado muito bem do RabbitMQ [3].</div>
<div><br></div><div>Existem vários níveis de "rodas" que pode ser reinventados. A não ser que você *queira* fazer isso, talvez para aprender como funcionam as coisas, não acho que valha muito a pena.</div><div>
<br>
</div><div>my $twocents;</div><div><br clear="all">[]s,<br>-- <br><font face="georgia, serif">Alexei Znamensky [russoz_gmail_com] [<a href="http://russoz.wordpress.com" target="_blank">russoz.wordpress.com</a>] [<a href="http://www.flickr.com/photos/alexeiz" target="_blank">www.flickr.com/photos/alexeiz</a>]<br>
<span style="border-collapse:collapse"><div>«Only love / Can bring the rain / That makes you yearn to the sky»</div></span></font><br>
</div><div>[1] <a href="http://developerweb.net/viewtopic.php?id=2941">http://developerweb.net/viewtopic.php?id=2941</a></div><div>[2] <a href="http://lmctfy.org/Net::Server">http://lmctfy.org/Net::Server</a></div><div>[3] <a href="http://www.rabbitmq.com/">http://www.rabbitmq.com/</a></div>
<div><br></div><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta http-equiv="content-type" content="text/html; charset=utf-8">