<div class="gmail_quote">2010/12/18 Agnaldo Macedo <span dir="ltr">&lt;<a href="mailto:agnaldo@starweb-software.com.br">agnaldo@starweb-software.com.br</a>&gt;</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 &quot;Aguardando ...&quot;;<br>
     my $new_sock = $sock-&gt;accept();<br>
     print &quot;Processando ...&quot;;<br>
     my $data = &#39;&#39;;<br>
     $data = &lt;$new_sock&gt;;<br>
     print &quot;Dados recebidos ...&quot;;<br>
às vezes, por motivo de &quot;alguma coisa&quot; no client que faz a conexão, ele trava.<br>
Eu fico com e mensagem de &quot;Processando ...&quot; na tela.<br>
Ou seja, na instrução<br>
     $data = &lt;$new_sock&gt;;<br>
ele fica lendo, lendo, lendo e não chega ao final.<br>
Não sei se é falta de algum &quot;byte&quot; finalizado da mensagem, ou se apenas problema de time out e ele fica esperando.<br>
Teria algo que eu pudesse &quot;quebrar&quot; 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-&gt;new (LocalPort =&gt; 8010, Type =&gt; SOCK_STREAM, timeout =&gt; 120, Proto =&gt; &#39;tcp&#39;, Listen =&gt; 50);<br>
unless ($sock) { die &quot;Servidor não pode ser criado&quot; }<br>
print &quot;Servidor iniciado\n&quot;;<br>
<br>
my $continua = &#39;SIM&#39;;<br>
while ($continua eq &#39;SIM&#39;)<br>
  {<br>
     print &quot;Aguardando ...&quot;;<br>
     my $new_sock = $sock-&gt;accept();<br>
     print &quot;Processando ...&quot;;<br>
     my $data = &#39;&#39;;<br>
     $data = &lt;$new_sock&gt;;<br>
     print &quot;Dados recebidos ...&quot;;<br>
<br>
     if ($data)<br>
            {<br>
               print &quot;Dados disponiveis ...\n&quot;;<br>
            }<br>
        else<br>
            {<br>
               print &quot;Nada a processar!\n&quot;;<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 &quot;rodas&quot; 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">