Hello, 

i am using snmp and alarm together to timeout a snmp query( to printer ). however, 
once a timeout
happens with an alarm, the next snmp query with a different snmp session always 
inherit the
previous failed snmp query result. i also use the timeout property in snmp, but it 
doesn't seem to
do anything. 

anyway here is code.

{
    foreach $pr_section_name (values %{$config}) {

        my $pr_name = $pr_section_name->{pr_name};
        next unless $pr_name;
        $pr_names{$pr_name}="";
        
        next if $get_pr_names == 1;

        my $cmnt = $pr_section_name->{cmnt};
        my $ip = $pr_section_name->{ip};
        my $lcd_mib_1 = $pr_section_name->{lcd_mib_1};
        my $lcd_mib_2 = $pr_section_name->{lcd_mib_2};

        my ($session, $error) = Net::SNMP->session(
              -hostname  => $ip,
              -community => chomp($cmnt),
              -port      => 161,
              -timeout   => 5,
        );

        if (!defined($session)) {
              print STDERR $error;
              next;
        }

        my $pr_status = &_snmp_query($session,$status_mib) if $status_mib;
        my $pr_lcd_msg = &_snmp_query($session,$lcd_msg_mib) if $lcd_msg_mib;
        my $lcd_msg_1 = &_snmp_query($session,$lcd_mib_1) if $lcd_mib_1;
        my $lcd_msg_2 = &_snmp_query($session,$lcd_mib_2) if $lcd_mib_2;
     }
}

# snmp query
sub _snmp_query {
   my ($s,$mib) = @_;
   my $result;

   # printer status
   eval {
        local $SIG{ALRM} = sub { die "alarm\n" };
        alarm 2;
        $result = $s->get_request(
              -varbindlist => [$mib]
        );
        alarm 0;
   };

   if ($@) { 
        return unless $@ eq "alarm\n";
   } else {
        return lc($result->{$mib});
   }
}



regards,

Qiang

__________________________________
Do you Yahoo!?
Yahoo! Search - Find what you’re looking for faster
http://search.yahoo.com

-- 
Report problems: http://perl.apache.org/bugs/
Mail list info: http://perl.apache.org/maillist/modperl.html
List etiquette: http://perl.apache.org/maillist/email-etiquette.html

Reply via email to