Este livro <a href="http://www.amazon.com/Network-Programming-Perl-Lincoln-Stein/dp/0201615711">http://www.amazon.com/Network-Programming-Perl-Lincoln-Stein/dp/0201615711</a> tem tudo que vocês precisa sobre este assunto e não sabia :D !<div>

<br></div><div>Abraços,</div><div><br></div><div>Solli Honorio</div><div class="gmail_extra"><br><br><div class="gmail_quote">Em 25 de novembro de 2012 10:55, Tiago Peczenyj <span dir="ltr"><<a href="mailto:tiago.peczenyj@gmail.com" target="_blank">tiago.peczenyj@gmail.com</a>></span> escreveu:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><p>Eu quero fazer em perl puro antes de usar uma lib externa ate para comparar ;-)</p>
<div class="gmail_quote">Em 25/11/2012 08:05, "Solli Honorio" <<a href="mailto:shonorio@gmail.com" target="_blank">shonorio@gmail.com</a>> escreveu:<div><div class="h5"><br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">


Tiago,<br><br>Sei que você é macaco velho, por isto não vou perguntar se você já considerou a utilização de um framework (POE, Mojo ou Net::Server por exemplo) para este trabalho, e nem enumerar todas as vantagens que estes framework tem em relação em codificar manualmente.<br>




<br>Com relação a tua dúvida, você terá que criar uma área de buffer para armazenar a parte que ainda não está completa, tipo assim :<br><br><code><br><span style="font-family:courier new,monospace"><br>...<br>   $content_from_client = qq/${buffer_from_server}${</span><span style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">content_from_client</span>}/;<br>




   my $rindex           = rindex $</span><span style="font-family:courier new,monospace"><span style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">content_from_client, qq/\n/;<br>   $b</span></span></span><span style="font-family:courier new,monospace"><span style="font-family:courier new,monospace"><span style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">uffer_from_server  = substr </span></span></span></span><span style="font-family:courier new,monospace"><span style="font-family:courier new,monospace"><span style="font-family:courier new,monospace"><span style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">$content_from_client, ++$rindex;<br>




<br></span></span></span></span>...<br></span><br></code><br><div class="gmail_extra"><br>Como vc está observando, a vida de um server não é simples. A reconstrução dos dados é um trabalho penoso e quase mágico (e nem estamos falando de acesso blocking/non-blocking, gerenciamento de forks/threads, etc), e é por isto e outras coisas que os frameworks são recomendadíssimo.<br>




<br>Abraços,<br><br>Solli Honorio<br><br><br><div class="gmail_quote">Em 24 de novembro de 2012 19:52, Tiago Peczenyj <span dir="ltr"><<a href="mailto:tiago.peczenyj@gmail.com" target="_blank">tiago.peczenyj@gmail.com</a>></span> escreveu:<br>




<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Ok<div><br></div><div>Recebi a dica de usar sysread e "funciona"</div><div><br></div><div>




entretanto o meu problema é: eu tenho um protocolo orientado a linhas, cada linha é um "evento" que eu preciso processar. posso pegar uma linha pela metade e eu teria que guardar para "emendar" no proximo loop.</div>






<div><br></div><div>pensei em algo como</div><div><br></div><div><pre style="margin-top:0px;margin-bottom:10px;padding:5px;border:0px none;font-size:14px;vertical-align:baseline;background-color:rgb(238,238,238);font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,serif;overflow:auto;width:auto;max-height:600px;line-height:18px">



<code style="margin:0px;padding:0px;border:0px none;vertical-align:baseline;font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,serif"><span style="margin:0px;padding:0px;border:0px none;vertical-align:baseline;background-color:transparent;color:rgb(0,0,139)">while</span><span style="margin:0px;padding:0px;border:0px none;vertical-align:baseline;background-color:transparent"> </span><span style="margin:0px;padding:0px;border:0px none;vertical-align:baseline;background-color:transparent">(</span><span style="margin:0px;padding:0px;border:0px none;vertical-align:baseline;background-color:transparent">$buf </span><span style="margin:0px;padding:0px;border:0px none;vertical-align:baseline;background-color:transparent">=~</span><span style="margin:0px;padding:0px;border:0px none;vertical-align:baseline;background-color:transparent"> s</span><span style="margin:0px;padding:0px;border:0px none;vertical-align:baseline;background-color:transparent">/^(.*)</span><span style="margin:0px;padding:0px;border:0px none;vertical-align:baseline;background-color:transparent">\n</span><span style="margin:0px;padding:0px;border:0px none;vertical-align:baseline;background-color:transparent">//)</span><span style="margin:0px;padding:0px;border:0px none;vertical-align:baseline;background-color:transparent"> </span><span style="margin:0px;padding:0px;border:0px none;vertical-align:baseline;background-color:transparent">{</span><span style="margin:0px;padding:0px;border:0px none;vertical-align:baseline;background-color:transparent">
    process_message</span><span style="margin:0px;padding:0px;border:0px none;vertical-align:baseline;background-color:transparent">(</span><span style="margin:0px;padding:0px;border:0px none;vertical-align:baseline;background-color:transparent;color:rgb(128,0,0)">"$1"</span><span style="margin:0px;padding:0px;border:0px none;vertical-align:baseline;background-color:transparent">);</span><span style="margin:0px;padding:0px;border:0px none;vertical-align:baseline;background-color:transparent">
 </span><span style="margin:0px;padding:0px;border:0px none;vertical-align:baseline;background-color:transparent">}</span></code></pre></div><div><div class="gmail_quote">mas como eu faço na situação</div><div class="gmail_quote">






<br></div><div class="gmail_quote">envio </div><div class="gmail_quote"><br></div><div class="gmail_quote">linha1</div><div class="gmail_quote">linha2</div><div class="gmail_quote">linha3</div><div class="gmail_quote"><br>






</div><div class="gmail_quote">e quando leio...</div><div class="gmail_quote"><br></div><div class="gmail_quote">buffer => "linha1\r\nlin";</div><div class="gmail_quote"><br></div><div class="gmail_quote">eu preciso guardar o "lin" pra proxima fase. tem alguma forma menos obscura de faze-lo?</div>




<div><div>

<div class="gmail_quote"><br></div><div class="gmail_quote">2012/11/24 Tiago Peczenyj <span dir="ltr"><<a href="mailto:tiago.peczenyj@gmail.com" target="_blank">tiago.peczenyj@gmail.com</a>></span><br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">






Ola Galera<div><br></div><div>Eu tenho algo mais ou menos assim</div><div><br></div><div><a href="https://gist.github.com/4141422" target="_blank">https://gist.github.com/4141422</a></div><div><br></div><div>O que acontece é que, se eu fizer</div>







<div><br></div><div>bash$ (echo "xxx" ;sleep 30 ; echo "yyy") | nc localhost 9090</div><div><br></div><div>ta de boa, o xxx e o yyy são impressos em momentos distintos mas</div><div><br></div><div><div>







bash$ (echo -n "xxx" ;sleep 30 ; echo "yyy") | nc localhost 9090</div><div><br></div><div>O server TRAVA enquanto </div><div><br></div><div>Agora o que acontece: eu tenho que escutar em outra porta (otimi o codigo mas basicamente eu inicio outro IO::Socket::INET em outra porta e trato dentro do main loop) outros clientes e fazer coisas divertidas com eles. com o server travado eu não faço mais nada.</div>







<div><br></div><div>achei q era o getline mas substituindo por getc para ler caracter a caracter eu só consigo ler o primeiro antes de travar.</div><div><br></div><div>alguma ideia?</div><div><br></div><div>outra coisa, eu suportamente tenho que ler um protocolo simples, uma linha com um padrão, como</div>







<div><br></div><div>a|b|c|d\r\n</div><div><br></div><div>então o getline me é util, não achei outra forma de brincar com um buffer sem ficar maluco. alias eu deveria suportar utf-8 na entrada porem eu não vi diferença no binmode, tem algum truque? estou esquecendo de algo? o common::sense ja faz algo por mim?</div>







<div><br></div><div>Obrigado</div><span><font color="#888888"><div><br></div><div><br></div><div><br></div>-- <br>Tiago B. Peczenyj<br>Linux User #405772<br><br><a href="http://pacman.blog.br" target="_blank">http://pacman.blog.br</a><br>







</font></span></div>
</blockquote></div><br><br clear="all"><div><br></div>-- <br>Tiago B. Peczenyj<br>Linux User #405772<br><br><a href="http://pacman.blog.br" target="_blank">http://pacman.blog.br</a><br>
</div></div></div>
<br>=begin disclaimer<br>
   Sao Paulo Perl Mongers: <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br>
 SaoPaulo-pm mailing list: <a href="mailto:SaoPaulo-pm@pm.org" target="_blank">SaoPaulo-pm@pm.org</a><br>
 L<<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>><br>
=end disclaimer<br>
<br></blockquote></div><br><br clear="all"><br>-- <br>"o animal satisfeito dorme". - Guimarães Rosa<br>
</div>
<br>=begin disclaimer<br>
   Sao Paulo Perl Mongers: <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br>
 SaoPaulo-pm mailing list: <a href="mailto:SaoPaulo-pm@pm.org" target="_blank">SaoPaulo-pm@pm.org</a><br>
 L<<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>><br>
=end disclaimer<br>
<br></blockquote></div></div></div>
<br>=begin disclaimer<br>
   Sao Paulo Perl Mongers: <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br>
 SaoPaulo-pm mailing list: <a href="mailto:SaoPaulo-pm@pm.org">SaoPaulo-pm@pm.org</a><br>
 L<<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>><br>
=end disclaimer<br>
<br></blockquote></div><br><br clear="all"><div><br></div>-- <br>"o animal satisfeito dorme". - Guimarães Rosa<br>
</div>