Talvez você queira diminuir o timeout padrão:<div>sub PING_TIMEOUT () { 5 }</div><div>(No seu script era 1 segundo se não me engano)</div><div><br></div><div>No POE::Component::Client::Ping->spawn, talvez você queira passar a opção Parallelism, ex:</div>
<div><div>POE::Component::Client::Ping->spawn(</div><div> Alias => 'pinger', # The component's name will be "pinger".</div><div> Timeout => PING_TIMEOUT, # The default ping timeout.</div>
<div> Parallelism => 128</div><div>);</div></div><div><br><div class="gmail_quote">2010/7/12 João André Simioni <span dir="ltr"><<a href="mailto:jasimioni@gmail.com">jasimioni@gmail.com</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Thiago,<br>
<br>
dando uma bem de vagabundo, não li nada do POE, só modifiquei o<br>
código abaixo para pingar todos os meus Hosts.<br>
<br>
Mas ele está fazendo poucos processos paralelos. O tempo total de<br>
testes está 11 minutos com o POE, e o load nem faz cócegas. Sabem<br>
fácil como mexer nisso?<br>
<br>
Obrigado<br>
<div><div></div><div class="h5"><br>
2010/7/12 Thiago Glauco Sanchez <<a href="mailto:thiagoglauco@ticursos.net">thiagoglauco@ticursos.net</a>>:<br>
> Puxa... eu sou muito "toupeira"... já tem código de exemplo para isso feito<br>
> e muito mais pratico e completo que o meu...:<br>
><br>
> <a href="http://poe.perl.org/?POE_Cookbook/Pinging_Multiple_Hosts" target="_blank">http://poe.perl.org/?POE_Cookbook/Pinging_Multiple_Hosts</a><br>
><br>
> Em 12/07/2010 15:52, Thiago Glauco Sanchez escreveu:<br>
>><br>
>> Um pequeno exemplo que eu criei apenas para ilustrar... o pessoal que<br>
>> desejar incrementar, por favor, be my guest.<br>
>><br>
>> use 5.12.0;<br>
>> use POE;<br>
>> use Net::Ping;<br>
>> POE::Session->create(<br>
>> inline_states => {<br>
>> _start => sub {<br>
>> my ($kernel) = $_[KERNEL];<br>
>> print "Setting up a session\n";<br>
>> $kernel->yield("ping");<br>
>> },<br>
>><br>
>> ping => sub{my ($kernel) = $_[KERNEL];<br>
>> my @ping = `ping -n 1 <a href="http://www.ticursos.net" target="_blank">www.ticursos.net</a>`;<br>
>> map{say "ping externo ok" if $_ =~ /Perdidos = 0/ } @ping;<br>
>> $kernel->delay_set("net_ping" => 3);<br>
>><br>
>> },<br>
>><br>
>> net_ping => sub{ my ($kernel) = $_[KERNEL];<br>
>> my $p = Net::Ping->new();<br>
>> $p->port_number(80);<br>
>> my ($ret, $duration, $ip) = $p->ping('<a href="http://ticursos.net" target="_blank">ticursos.net</a>');<br>
>> say "net::ping ok" if $ret;<br>
>> $p->close();<br>
>> $kernel->delay_set("ping" => 3)<br>
>> },<br>
>> },<br>
>> );<br>
>><br>
>> say "Iniciando o Kernel...";<br>
>> $poe_kernel->run( );<br>
>> exit(0);<br>
>><br>
>> sub start {<br>
>> my ($kernel) = $_[KERNEL];<br>
>> say "Iniciando os testes com POE";<br>
>> $kernel->yield("ping");<br>
>> }<br>
>><br>
>><br>
>> Em 12/07/2010 15:38, João André Simioni escreveu:<br>
>>><br>
>>> O pessoal comentou - eu vou dar uma olhada nele com atenção.<br>
>>><br>
>>> Obrigado pela dica.<br>
>>><br>
>>> 2010/7/12 Thiago Glauco Sanchez<<a href="mailto:thiagoglauco@ticursos.net">thiagoglauco@ticursos.net</a>>:<br>
>>>><br>
>>>> O Perl tem um framework para aplicações em rede e Multitarefa chamada<br>
>>>> POE<br>
>>>> que<br>
>>>> "Provide a cooperative scheduling and multitasking environment rivalling<br>
>>>> threads and IPC"<br>
>>>> Não seria o caso de estudarmos a possibilidade de usar esse framework no<br>
>>>> seu<br>
>>>> sistema???<br>
>>>><br>
>>>> Em 11/07/2010 23:57, João André Simioni escreveu:<br>
>>>>><br>
>>>>> Foi um typo - erro de digitação - o Net::Ping testa TCP e UDP. O ping<br>
>>>>> externo ICMP.<br>
>>>>><br>
>>>>> Mas assim, eu preciso resolver o problema com esse teste em Perl -<br>
>>>>> como eu disse, essa parte do código é só um pedaço de um sistema<br>
>>>>> maior. SNMP já é usado para várias outras coisas, mas dependem de<br>
>>>>> access lists em routers e eu não tenho como liberar.<br>
>>>>><br>
>>>>> []'s<br>
>>>>><br>
>>>>> 2010/7/11 Thiago Glauco Sanchez<<a href="mailto:thiagoglauco@ticursos.net">thiagoglauco@ticursos.net</a>>:<br>
>>>>><br>
>>>>>> O que eu quero dizer: você testou com o ping externo que é um teste<br>
>>>>>> icmp...<br>
>>>>>> depois fez outro teste icmp com o Net::Ping...<br>
>>>>>><br>
>>>>>> Não seria mais interessante testar de outra forma?<br>
>>>>>><br>
>>>>>> $p = Net::Ping->new("tcp", 2);<br>
>>>>>> $p->port_number(getservbyname("http", "tcp"));<br>
>>>>>><br>
>>>>>> Mais umas coisas: Suas máquinas/equipamentos em teste estão via<br>
>>>>>> internet<br>
>>>>>> ou<br>
>>>>>> rede local?<br>
>>>>>> Já pensou em usar SNMP? Já tive um problema parecido e iria utilizar<br>
>>>>>> um<br>
>>>>>> processo para cada equipamento por desempenho e acabai optando por<br>
>>>>>> utilizar<br>
>>>>>> o Net:SNMP<br>
>>>>>> que permite utilizar uma função de callback em vez de utilizar um<br>
>>>>>> processo<br>
>>>>>> para cada equipamento. Eu mando uma requisição para todos os<br>
>>>>>> equipamentos<br>
>>>>>> e<br>
>>>>>> conforme eles respondem<br>
>>>>>> a função de call-back trata a requisição.<br>
>>>>>><br>
>>>>>> Porém, não conheço o seu ambiente. Apenas acho que criar 4000 threads<br>
>>>>>> não<br>
>>>>>> seja a melhor solução.<br>
>>>>>><br>
>>>>>><br>
>>>>>> Em 11/07/2010 23:18, João André Simioni escreveu:<br>
>>>>>><br>
>>>>>>> É typo - já está certo no código. ICMP vai via comando externo, UDP e<br>
>>>>>>> TCP via Net::Ping.<br>
>>>>>>><br>
>>>>>>> Com relação aos testes, é normal um momento de sobrecarga causar a<br>
>>>>>>> não<br>
>>>>>>> resposta de testes - essas sobrecargas não devem duram mais que 5<br>
>>>>>>> segundos. Por isso o sleep - assim eu faço o mesmo teste 3x, com<br>
>>>>>>> intervalos de 3 segundos.<br>
>>>>>>><br>
>>>>>>> []'s<br>
>>>>>>><br>
>>>>>>> On Sun, Jul 11, 2010 at 10:31 PM, Blabos de Blebe<<a href="mailto:blabos@gmail.com">blabos@gmail.com</a>><br>
>>>>>>> wrote:<br>
>>>>>>><br>
>>>>>>><br>
>>>>>>>> Não seria um typo?<br>
>>>>>>>><br>
>>>>>>>> icmp -> ping;<br>
>>>>>>>> tcp e udp -> Net::Ping<br>
>>>>>>>><br>
>>>>>>>><br>
>>>>>>>><br>
>>>>>>>> On Sun, Jul 11, 2010 at 6:42 PM, Thiago Glauco Sanchez<br>
>>>>>>>> <<a href="mailto:thiagoglauco@ticursos.net">thiagoglauco@ticursos.net</a>> wrote:<br>
>>>>>>>><br>
>>>>>>>><br>
>>>>>>>>> Sim sim, entendi sua preocupação.<br>
>>>>>>>>> Mas em vez de:<br>
>>>>>>>>><br>
>>>>>>>>> for (1..3) {<br>
>>>>>>>>> my $ping = `/bin/ping -c 1 -w 1 $ip`;<br>
>>>>>>>>><br>
>>>>>>>>> não seria melhor já mandar pingar as 3 vezes no comando ou apenas<br>
>>>>>>>>> 1?<br>
>>>>>>>>> Você<br>
>>>>>>>>> está gerando 3 processos externos sem necessidade real.<br>
>>>>>>>>><br>
>>>>>>>>> outra... o comando ping já não é icmp?<br>
>>>>>>>>> my $p = Net::Ping->new('icmp')???<br>
>>>>>>>>><br>
>>>>>>>>><br>
>>>>>>>>> Em 11/07/2010 17:04, João André Simioni escreveu:<br>
>>>>>>>>><br>
>>>>>>>>><br>
>>>>>>>>>> Eu quero fazer o ping de 3 formas - UDP Echo / TCP Echo e ICMP<br>
>>>>>>>>>> Echo.<br>
>>>>>>>>>> Alguns clientes tem filtros e assim eu evito falsos positivos.<br>
>>>>>>>>>><br>
>>>>>>>>>> Net::Ping mesmo com root tem resultados incoerentes quando uso<br>
>>>>>>>>>> ICMP e<br>
>>>>>>>>>> Threads.<br>
>>>>>>>>>><br>
>>>>>>>>>> []'s<br>
>>>>>>>>>><br>
>>>>>>>>>> On Sun, Jul 11, 2010 at 4:56 PM, Thiago Glauco Sanchez<br>
>>>>>>>>>> <<a href="mailto:thiagoglauco@ticursos.net">thiagoglauco@ticursos.net</a>> wrote:<br>
>>>>>>>>>><br>
>>>>>>>>>><br>
>>>>>>>>>><br>
>>>>>>>>>>> Endosso a solução do Lorn. Use o POE.<br>
>>>>>>>>>>><br>
>>>>>>>>>>> E cara... pra que isso??<br>
>>>>>>>>>>><br>
>>>>>>>>>>> sub checkIp {<br>
>>>>>>>>>>> my $ip = shift;<br>
>>>>>>>>>>> my $pingOk = 0;<br>
>>>>>>>>>>><br>
>>>>>>>>>>> eval {<br>
>>>>>>>>>>> for (1..3) {<br>
>>>>>>>>>>> my $ping = `/bin/ping -c 1 -w 1 $ip`;<br>
>>>>>>>>>>><br>
>>>>>>>>>>> if (grep { / 0% packet loss/ } $ping) {<br>
>>>>>>>>>>> $pingOk = 1;<br>
>>>>>>>>>>> return 1;<br>
>>>>>>>>>>> }<br>
>>>>>>>>>>><br>
>>>>>>>>>>> if ($pingOk == 0) {<br>
>>>>>>>>>>> my $p = Net::Ping->new('icmp');<br>
>>>>>>>>>>> $p->service_check(1);<br>
>>>>>>>>>>> if ($p->ping($ip, 1)) {<br>
>>>>>>>>>>> $pingOk = 1;<br>
>>>>>>>>>>> return 1;<br>
>>>>>>>>>>> }<br>
>>>>>>>>>>> }<br>
>>>>>>>>>>><br>
>>>>>>>>>>> if ($pingOk == 0) {<br>
>>>>>>>>>>> my $p = Net::Ping->new('udp');<br>
>>>>>>>>>>> $p->service_check(1);<br>
>>>>>>>>>>> if ($p->ping($ip, 1)) {<br>
>>>>>>>>>>> $pingOk = 1;<br>
>>>>>>>>>>> return 1;<br>
>>>>>>>>>>> }<br>
>>>>>>>>>>> }<br>
>>>>>>>>>>><br>
>>>>>>>>>>> sleep 3;<br>
>>>>>>>>>>> }<br>
>>>>>>>>>>> };<br>
>>>>>>>>>>><br>
>>>>>>>>>>> Para pingar com ping externo, depois com o Net::Ping via icmp e<br>
>>>>>>>>>>> depois<br>
>>>>>>>>>>> com<br>
>>>>>>>>>>> net::Ping udp? Ah... se não me engano, Net::Ping precisa de<br>
>>>>>>>>>>> permissão<br>
>>>>>>>>>>> root<br>
>>>>>>>>>>> para retornar um icmp de forma correta...<br>
>>>>>>>>>>><br>
>>>>>>>>>>><br>
>>>>>>>>>>> Em 09/07/2010 17:48, João André Simioni escreveu:<br>
>>>>>>>>>>><br>
>>>>>>>>>>><br>
>>>>>>>>>>><br>
>>>>>>>>>>>> Caros,<br>
>>>>>>>>>>>><br>
>>>>>>>>>>>> tenho um script para testar cerca de 4700 equipamentos, usando<br>
>>>>>>>>>>>> ping.<br>
>>>>>>>>>>>> Queria usar cerca 250 threads para isso, então o que eu fiz foi<br>
>>>>>>>>>>>> quebrar o grupo de 4300 em grupos 18 elementos e abri uma thread<br>
>>>>>>>>>>>> para<br>
>>>>>>>>>>>> cada.<br>
>>>>>>>>>>>><br>
>>>>>>>>>>>> Não há nenhum problema com o código, o que acontece é que o<br>
>>>>>>>>>>>> tempo<br>
>>>>>>>>>>>> de<br>
>>>>>>>>>>>> abertura das threads é muito alto. E quanto mais threads eu<br>
>>>>>>>>>>>> abro,<br>
>>>>>>>>>>>> maior o tempo para abertura das próximas. As primeiras abrem em<br>
>>>>>>>>>>>> 30ms,<br>
>>>>>>>>>>>> mas perto da thread 70 esse tempo já vai para quase 1 segundo.<br>
>>>>>>>>>>>><br>
>>>>>>>>>>>> Vocês sabem como otimizar esse tempo de abertura? Ou alguma<br>
>>>>>>>>>>>> outra<br>
>>>>>>>>>>>> solução?<br>
>>>>>>>>>>>><br>
>>>>>>>>>>>> Segue o output do script como exemplo:<br>
>>>>>>>>>>>> Para 4677 cpes, e 250 threads, tenho no final 246 grupos, com 19<br>
>>>>>>>>>>>> elementos<br>
>>>>>>>>>>>> cada<br>
>>>>>>>>>>>> Trying to create thread in Fri Jul 9 17:46:50 2010.61858<br>
>>>>>>>>>>>> Created thread 1 (1) - took 0.030138 seconds to create<br>
>>>>>>>>>>>> Trying to create thread in Fri Jul 9 17:46:50 2010.92080<br>
>>>>>>>>>>>> Created thread 2 (2) - took 0.042668 seconds to create<br>
>>>>>>>>>>>> Trying to create thread in Fri Jul 9 17:46:50 2010.134968<br>
>>>>>>>>>>>> Created thread 3 (3) - took 0.064245 seconds to create<br>
>>>>>>>>>>>> Trying to create thread in Fri Jul 9 17:46:50 2010.199430<br>
>>>>>>>>>>>> Created thread 4 (4) - took 0.082642 seconds to create<br>
>>>>>>>>>>>> Trying to create thread in Fri Jul 9 17:46:50 2010.282278<br>
>>>>>>>>>>>> Created thread 5 (5) - took 0.128257 seconds to create<br>
>>>>>>>>>>>> Trying to create thread in Fri Jul 9 17:46:50 2010.410769<br>
>>>>>>>>>>>> Created thread 6 (6) - took 0.136458 seconds to create<br>
>>>>>>>>>>>> Trying to create thread in Fri Jul 9 17:46:50 2010.547383<br>
>>>>>>>>>>>> Created thread 7 (7) - took 0.208085 seconds to create<br>
>>>>>>>>>>>> Trying to create thread in Fri Jul 9 17:46:50 2010.755594<br>
>>>>>>>>>>>> Created thread 8 (8) - took 0.173014 seconds to create<br>
>>>>>>>>>>>> Trying to create thread in Fri Jul 9 17:46:50 2010.928756<br>
>>>>>>>>>>>> Created thread 9 (9) - took 0.132713 seconds to create<br>
>>>>>>>>>>>> Trying to create thread in Fri Jul 9 17:46:51 2010.61608<br>
>>>>>>>>>>>> Created thread 10 (10) - took 0.127795 seconds to create<br>
>>>>>>>>>>>> Trying to create thread in Fri Jul 9 17:46:51 2010.189536<br>
>>>>>>>>>>>> Created thread 11 (11) - took 0.301836 seconds to create<br>
>>>>>>>>>>>><br>
>>>>>>>>>>>> Obrigado<br>
>>>>>>>>>>>><br>
>>>>>>>>>>>> João André Simioni<br>
>>>>>>>>>>>><br>
>>>>>>>>>>>><br>
>>>>>>>>>>>><br>
>>>>>>>>>>>> #!/usr/bin/perl<br>
>>>>>>>>>>>><br>
>>>>>>>>>>>> use strict;<br>
>>>>>>>>>>>> use DBI;<br>
>>>>>>>>>>>> use Net::Ping;<br>
>>>>>>>>>>>> use Time::HiRes qw/usleep tv_interval gettimeofday/;<br>
>>>>>>>>>>>> use threads ('yield', 'stack_size' => 32*4096, 'exit'<br>
>>>>>>>>>>>> =><br>
>>>>>>>>>>>> 'threads_only', 'stringify');<br>
>>>>>>>>>>>><br>
>>>>>>>>>>>> my $host = '192.168.160.179';<br>
>>>>>>>>>>>> my $sid = 'HOMOLOG';<br>
>>>>>>>>>>>> my $user = 'mac_user';<br>
>>>>>>>>>>>> my $pass = 'mac_user';<br>
>>>>>>>>>>>><br>
>>>>>>>>>>>> my $dbh = DBI->connect("dbi:Oracle:host=$host;sid=$sid", $user,<br>
>>>>>>>>>>>> $pass,<br>
>>>>>>>>>>>> { AutoCommit => 1 });<br>
>>>>>>>>>>>><br>
>>>>>>>>>>>> my $sth = $dbh->prepare('SELECT CPE_ID, CLIENTE_ID, CPE_DESC,<br>
>>>>>>>>>>>> CPE_IP_WAN, CPE_NODE, CPE_IF FROM MAC_CPE WHERE CPE_PING = ? AND<br>
>>>>>>>>>>>> CPE_ATIVO = ?');<br>
>>>>>>>>>>>> $sth->execute('1', 'A');<br>
>>>>>>>>>>>><br>
>>>>>>>>>>>> my @cpes;<br>
>>>>>>>>>>>><br>
>>>>>>>>>>>> while (my (@row) = $sth->fetchrow_array) {<br>
>>>>>>>>>>>> push @cpes, [ @row ];<br>
>>>>>>>>>>>> }<br>
>>>>>>>>>>>><br>
>>>>>>>>>>>> $dbh->disconnect();<br>
>>>>>>>>>>>><br>
>>>>>>>>>>>> my $maxThreads = 250;<br>
>>>>>>>>>>>> my $total = @cpes;<br>
>>>>>>>>>>>><br>
>>>>>>>>>>>> my $cpePerThread = int($total / $maxThreads);<br>
>>>>>>>>>>>><br>
>>>>>>>>>>>> my @toMonitor;<br>
>>>>>>>>>>>> my $i = 0;<br>
>>>>>>>>>>>> my $c = 0;<br>
>>>>>>>>>>>><br>
>>>>>>>>>>>> foreach my $cpe (@cpes) {<br>
>>>>>>>>>>>> push @{$toMonitor[$i]}, $cpe;<br>
>>>>>>>>>>>> $c++;<br>
>>>>>>>>>>>><br>
>>>>>>>>>>>> if ($c> $cpePerThread) {<br>
>>>>>>>>>>>> $i++;<br>
>>>>>>>>>>>> $c = 0;<br>
>>>>>>>>>>>> }<br>
>>>>>>>>>>>> }<br>
>>>>>>>>>>>><br>
>>>>>>>>>>>> print "Para $total cpes, e $maxThreads threads, tenho no final<br>
>>>>>>>>>>>> $i<br>
>>>>>>>>>>>> grupos, com ", scalar @{$toMonitor[0]}, " elementos cada\n";<br>
>>>>>>>>>>>><br>
>>>>>>>>>>>> sub processResult {<br>
>>>>>>>>>>>> my $r = shift;<br>
>>>>>>>>>>>> if (ref $r ne 'ARRAY') {<br>
>>>>>>>>>>>> print STDERR "Erro na thread\n";<br>
>>>>>>>>>>>> return 0;<br>
>>>>>>>>>>>> }<br>
>>>>>>>>>>>> my ($result, $host, $ifs) = @$r;<br>
>>>>>>>>>>>><br>
>>>>>>>>>>>> }<br>
>>>>>>>>>>>><br>
>>>>>>>>>>>> sub testeClient {<br>
>>>>>>>>>>>> my $threadNum = shift;<br>
>>>>>>>>>>>> my $cpeGroup = shift;<br>
>>>>>>>>>>>> foreach my $cpe (@{$cpeGroup}) {<br>
>>>>>>>>>>>> my ($cpeId, $clientId, $cpeDesc, $cpeIp, $cpeNode,<br>
>>>>>>>>>>>> $cpeIf)<br>
>>>>>>>>>>>> =<br>
>>>>>>>>>>>> @$cpe;<br>
>>>>>>>>>>>> my $pingOk =&checkIp($cpeIp);<br>
>>>>>>>>>>>> my $status = $pingOk ? 'RESPONDE' : 'MORTO';<br>
>>>>>>>>>>>> # print join(", ", $threadNum, $cpeId, $clientId,<br>
>>>>>>>>>>>> $cpeDesc,<br>
>>>>>>>>>>>> $cpeIp, $cpeNode, $cpeIf, $status), "\n";<br>
>>>>>>>>>>>> }<br>
>>>>>>>>>>>> # print "Finishing thread $threadNum\n";<br>
>>>>>>>>>>>> return([1, 0]);<br>
>>>>>>>>>>>> }<br>
>>>>>>>>>>>><br>
>>>>>>>>>>>> my $threadCount = 1;<br>
>>>>>>>>>>>> foreach my $cpeGroup (@toMonitor) {<br>
>>>>>>>>>>>> print "Trying to create thread";<br>
>>>>>>>>>>>> my $t0 = [gettimeofday];<br>
>>>>>>>>>>>><br>
>>>>>>>>>>>> print " in ", scalar localtime $t0->[0], ".", $t0->[1],<br>
>>>>>>>>>>>> "\n";<br>
>>>>>>>>>>>><br>
>>>>>>>>>>>> my $thr = threads->create({scalar => '1'},<br>
>>>>>>>>>>>> 'testeClient',<br>
>>>>>>>>>>>> $threadCount, $cpeGroup);<br>
>>>>>>>>>>>> my $elapsed = tv_interval ( $t0, [gettimeofday]);<br>
>>>>>>>>>>>> print "Created thread $thr ($threadCount) - took $elapsed<br>
>>>>>>>>>>>> seconds<br>
>>>>>>>>>>>> to create\n";<br>
>>>>>>>>>>>> $threadCount++;<br>
>>>>>>>>>>>><br>
>>>>>>>>>>>> while (threads->list()>= $maxThreads) {<br>
>>>>>>>>>>>> my @joinable = threads->list(threads::joinable);<br>
>>>>>>>>>>>> for (@joinable) {<br>
>>>>>>>>>>>> my $r = $_->join();<br>
>>>>>>>>>>>> &processResult($r);<br>
>>>>>>>>>>>> }<br>
>>>>>>>>>>>> usleep(10000);<br>
>>>>>>>>>>>> }<br>
>>>>>>>>>>>> my $elapsed = tv_interval ( $t0, [gettimeofday]);<br>
>>>>>>>>>>>> }<br>
>>>>>>>>>>>><br>
>>>>>>>>>>>> while (threads->list()) {<br>
>>>>>>>>>>>> my @joinable = threads->list(threads::joinable);<br>
>>>>>>>>>>>> for (@joinable) {<br>
>>>>>>>>>>>> my $r = $_->join();<br>
>>>>>>>>>>>> &processResult($r);<br>
>>>>>>>>>>>> }<br>
>>>>>>>>>>>> usleep(10000);<br>
>>>>>>>>>>>> }<br>
>>>>>>>>>>>><br>
>>>>>>>>>>>> sub checkIp {<br>
>>>>>>>>>>>> my $ip = shift;<br>
>>>>>>>>>>>> my $pingOk = 0;<br>
>>>>>>>>>>>><br>
>>>>>>>>>>>> eval {<br>
>>>>>>>>>>>> for (1..3) {<br>
>>>>>>>>>>>> my $ping = `/bin/ping -c 1 -w 1 $ip`;<br>
>>>>>>>>>>>><br>
>>>>>>>>>>>> if (grep { / 0% packet loss/ } $ping) {<br>
>>>>>>>>>>>> $pingOk = 1;<br>
>>>>>>>>>>>> return 1;<br>
>>>>>>>>>>>> }<br>
>>>>>>>>>>>><br>
>>>>>>>>>>>> if ($pingOk == 0) {<br>
>>>>>>>>>>>> my $p = Net::Ping->new('icmp');<br>
>>>>>>>>>>>> $p->service_check(1);<br>
>>>>>>>>>>>> if ($p->ping($ip, 1)) {<br>
>>>>>>>>>>>> $pingOk = 1;<br>
>>>>>>>>>>>> return 1;<br>
>>>>>>>>>>>> }<br>
>>>>>>>>>>>> }<br>
>>>>>>>>>>>><br>
>>>>>>>>>>>> if ($pingOk == 0) {<br>
>>>>>>>>>>>> my $p = Net::Ping->new('udp');<br>
>>>>>>>>>>>> $p->service_check(1);<br>
>>>>>>>>>>>> if ($p->ping($ip, 1)) {<br>
>>>>>>>>>>>> $pingOk = 1;<br>
>>>>>>>>>>>> return 1;<br>
>>>>>>>>>>>> }<br>
>>>>>>>>>>>> }<br>
>>>>>>>>>>>><br>
>>>>>>>>>>>> sleep 3;<br>
>>>>>>>>>>>> }<br>
>>>>>>>>>>>> };<br>
>>>>>>>>>>>><br>
>>>>>>>>>>>> return $pingOk;<br>
>>>>>>>>>>>> }<br>
>>>>>>>>>>>> _______________________________________________<br>
>>>>>>>>>>>> Rio-pm mailing list<br>
>>>>>>>>>>>> <a href="mailto:Rio-pm@pm.org">Rio-pm@pm.org</a><br>
>>>>>>>>>>>> <a href="http://mail.pm.org/mailman/listinfo/rio-pm" target="_blank">http://mail.pm.org/mailman/listinfo/rio-pm</a><br>
>>>>>>>>>>>><br>
>>>>>>>>>>>><br>
>>>>>>>>>>>><br>
>>>>>>>>>>>><br>
>>>>>>>>>>>><br>
>>>>>>>>>>> --<br>
>>>>>>>>>>> What is the sound of Perl? Is it not the sound of a wall that<br>
>>>>>>>>>>> people<br>
>>>>>>>>>>> have<br>
>>>>>>>>>>> stopped banging their heads against?<br>
>>>>>>>>>>> —Larry Wall<br>
>>>>>>>>>>><br>
>>>>>>>>>>> Thiago Glauco Sanchez<br>
>>>>>>>>>>> Intrutor Perl e Redes<br>
>>>>>>>>>>> <a href="http://www.ticursos.net" target="_blank">www.ticursos.net</a><br>
>>>>>>>>>>><br>
>>>>>>>>>>> _______________________________________________<br>
>>>>>>>>>>> Rio-pm mailing list<br>
>>>>>>>>>>> <a href="mailto:Rio-pm@pm.org">Rio-pm@pm.org</a><br>
>>>>>>>>>>> <a href="http://mail.pm.org/mailman/listinfo/rio-pm" target="_blank">http://mail.pm.org/mailman/listinfo/rio-pm</a><br>
>>>>>>>>>>><br>
>>>>>>>>>>><br>
>>>>>>>>>>><br>
>>>>>>>>>>><br>
>>>>>>>>>> _______________________________________________<br>
>>>>>>>>>> Rio-pm mailing list<br>
>>>>>>>>>> <a href="mailto:Rio-pm@pm.org">Rio-pm@pm.org</a><br>
>>>>>>>>>> <a href="http://mail.pm.org/mailman/listinfo/rio-pm" target="_blank">http://mail.pm.org/mailman/listinfo/rio-pm</a><br>
>>>>>>>>>><br>
>>>>>>>>>><br>
>>>>>>>>>><br>
>>>>>>>>>><br>
>>>>>>>>> --<br>
>>>>>>>>> What is the sound of Perl? Is it not the sound of a wall that<br>
>>>>>>>>> people<br>
>>>>>>>>> have<br>
>>>>>>>>> stopped banging their heads against?<br>
>>>>>>>>> —Larry Wall<br>
>>>>>>>>><br>
>>>>>>>>> Thiago Glauco Sanchez<br>
>>>>>>>>> Intrutor Perl e Redes<br>
>>>>>>>>> <a href="http://www.ticursos.net" target="_blank">www.ticursos.net</a><br>
>>>>>>>>><br>
>>>>>>>>> _______________________________________________<br>
>>>>>>>>> Rio-pm mailing list<br>
>>>>>>>>> <a href="mailto:Rio-pm@pm.org">Rio-pm@pm.org</a><br>
>>>>>>>>> <a href="http://mail.pm.org/mailman/listinfo/rio-pm" target="_blank">http://mail.pm.org/mailman/listinfo/rio-pm</a><br>
>>>>>>>>><br>
>>>>>>>>><br>
>>>>>>>>><br>
>>>>>>>> _______________________________________________<br>
>>>>>>>> Rio-pm mailing list<br>
>>>>>>>> <a href="mailto:Rio-pm@pm.org">Rio-pm@pm.org</a><br>
>>>>>>>> <a href="http://mail.pm.org/mailman/listinfo/rio-pm" target="_blank">http://mail.pm.org/mailman/listinfo/rio-pm</a><br>
>>>>>>>><br>
>>>>>>>><br>
>>>>>>>><br>
>>>>>>> _______________________________________________<br>
>>>>>>> Rio-pm mailing list<br>
>>>>>>> <a href="mailto:Rio-pm@pm.org">Rio-pm@pm.org</a><br>
>>>>>>> <a href="http://mail.pm.org/mailman/listinfo/rio-pm" target="_blank">http://mail.pm.org/mailman/listinfo/rio-pm</a><br>
>>>>>>><br>
>>>>>>><br>
>>>>>>><br>
>>>>>> --<br>
>>>>>> What is the sound of Perl? Is it not the sound of a wall that people<br>
>>>>>> have<br>
>>>>>> stopped banging their heads against?<br>
>>>>>> —Larry Wall<br>
>>>>>><br>
>>>>>> Thiago Glauco Sanchez<br>
>>>>>> Intrutor Perl e Redes<br>
>>>>>> <a href="http://www.ticursos.net" target="_blank">www.ticursos.net</a><br>
>>>>>><br>
>>>>>> _______________________________________________<br>
>>>>>> Rio-pm mailing list<br>
>>>>>> <a href="mailto:Rio-pm@pm.org">Rio-pm@pm.org</a><br>
>>>>>> <a href="http://mail.pm.org/mailman/listinfo/rio-pm" target="_blank">http://mail.pm.org/mailman/listinfo/rio-pm</a><br>
>>>>>><br>
>>>>>><br>
>>>>> _______________________________________________<br>
>>>>> Rio-pm mailing list<br>
>>>>> <a href="mailto:Rio-pm@pm.org">Rio-pm@pm.org</a><br>
>>>>> <a href="http://mail.pm.org/mailman/listinfo/rio-pm" target="_blank">http://mail.pm.org/mailman/listinfo/rio-pm</a><br>
>>>>><br>
>>>>><br>
>>>><br>
>>>> --<br>
>>>> What is the sound of Perl? Is it not the sound of a wall that people<br>
>>>> have<br>
>>>> stopped banging their heads against?<br>
>>>> —Larry Wall<br>
>>>><br>
>>>> Thiago Glauco Sanchez<br>
>>>> Intrutor Perl e Redes<br>
>>>> <a href="http://www.ticursos.net" target="_blank">www.ticursos.net</a><br>
>>>><br>
>>>> _______________________________________________<br>
>>>> Rio-pm mailing list<br>
>>>> <a href="mailto:Rio-pm@pm.org">Rio-pm@pm.org</a><br>
>>>> <a href="http://mail.pm.org/mailman/listinfo/rio-pm" target="_blank">http://mail.pm.org/mailman/listinfo/rio-pm</a><br>
>>>><br>
>>> _______________________________________________<br>
>>> Rio-pm mailing list<br>
>>> <a href="mailto:Rio-pm@pm.org">Rio-pm@pm.org</a><br>
>>> <a href="http://mail.pm.org/mailman/listinfo/rio-pm" target="_blank">http://mail.pm.org/mailman/listinfo/rio-pm</a><br>
>>><br>
>><br>
>><br>
><br>
><br>
> --<br>
> What is the sound of Perl? Is it not the sound of a wall that people have<br>
> stopped banging their heads against?<br>
> —Larry Wall<br>
><br>
> Thiago Glauco Sanchez<br>
> Intrutor Perl e Redes<br>
> <a href="http://www.ticursos.net" target="_blank">www.ticursos.net</a><br>
><br>
> _______________________________________________<br>
> Rio-pm mailing list<br>
> <a href="mailto:Rio-pm@pm.org">Rio-pm@pm.org</a><br>
> <a href="http://mail.pm.org/mailman/listinfo/rio-pm" target="_blank">http://mail.pm.org/mailman/listinfo/rio-pm</a><br>
><br>
_______________________________________________<br>
Rio-pm mailing list<br>
<a href="mailto:Rio-pm@pm.org">Rio-pm@pm.org</a><br>
<a href="http://mail.pm.org/mailman/listinfo/rio-pm" target="_blank">http://mail.pm.org/mailman/listinfo/rio-pm</a><br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br>Bruno C. Buss<br><a href="http://brunobuss.wordpress.com/">http://brunobuss.wordpress.com/</a><br><a href="http://www.dcc.ufrj.br/~brunobuss/">http://www.dcc.ufrj.br/~brunobuss/</a><br>
</div>