[SNMP4J] Problem with SNMP4j

MILLIGAN, Kristoffer Kristoffer.Milligan at vizada.com
Thu Sep 6 13:45:14 CEST 2012


Hello list,

snmp4j is for the most part working as expected .. I am however having a problem with a method of mine.

The method will leave a DefaultUdpTransportMapping listerner running, and it will leave a Timer running. These never seem to die. What am I doing wrong, and how can I kill of these listeners?

public ArrayList<String> getValues(String oid) throws IOException {
        
        ArrayList<String> result = new ArrayList<String>();
        
        TransportMapping transport = new DefaultUdpTransportMapping();
        //transport.listen();

        // Create Target Address object
        CommunityTarget comtarget = new CommunityTarget();
        comtarget.setCommunity(new OctetString(Setting.getInstance().getValue("settings", "community")));
        comtarget.setVersion(SnmpConstants.version2c);
        comtarget.setAddress(new UdpAddress(Setting.getInstance().getValue("settings", "ip") + "/" + Setting.getInstance().getValue("settings", "port")));
        comtarget.setRetries(2);
        comtarget.setTimeout(5000);

        // Create the PDU object
        PDU pdu = new PDU();
        pdu.add(new VariableBinding(new OID(oid)));
        pdu.setType(PDU.GET);
        //pdu.setRequestID(new Integer32(1));

        // Create Snmp object for sending data to Agent
        Snmp snmp = new Snmp(transport);
        snmp.listen();
        ResponseEvent response;
        while(true) {
            response = snmp.getNext(pdu, comtarget);
            if (response != null) {
                PDU responsePDU = response.getResponse();
                if(!response.getResponse().get(0).getOid().startsWith(new OID(oid))) {
                    //System.out.println("Starting with the same OID - breaking!");
                    break;
                }
                if (responsePDU != null) {
                    int errorStatus = responsePDU.getErrorStatus();
                    if (errorStatus == PDU.noError){
                        result.add(responsePDU.get(0).toValueString());
                        pdu = response.getResponse();
                        System.out.println("Adding " + responsePDU.get(0).toValueString());
                    }
                    else {
                        System.out.println("Response was error: " + pdu.getErrorStatusText());
                        break;
                    }
                } else {
                    System.out.println("PDU received was null");
                    break;
                }
            } else {
                System.out.println("Response received was null");
                break;
            }
        }
        snmp.close();

        return result;
    }


This message and any attachments are confidential to Vizada and intended solely for
the individual(s) or entity to which it is addressed. If you are not the intended recipient,
do not read, copy or distribute the email or any attachments. Please notify the sender
immediately by return e-mail.


More information about the SNMP4J mailing list