I implemented notification 'appShutdown' as follows:
1. NotificationOriginatorImpl -> notify() with 'appShutdown'
notification.
2. Snmp -> close() to release all resources.
3. Close application.
The result is exception (line numbers are for SNMP4J v2.6.2):
java.lang.RuntimeException: java.net.SocketException: socket closed
at
org.snmp4j.transport.DefaultUdpTransportMapping$ListenThread.run(DefaultUdpTransportMapping.java:455)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.net.SocketException: socket closed
at
java.net.DualStackPlainDatagramSocketImpl.socketReceiveOrPeekData(Native
Method)
at
java.net.DualStackPlainDatagramSocketImpl.receive0(DualStackPlainDatagramSocketImpl.java:124)
at
java.net.AbstractPlainDatagramSocketImpl.receive(AbstractPlainDatagramSocketImpl.java:143)
at java.net.DatagramSocket.receive(DatagramSocket.java:812)
at
org.snmp4j.transport.DefaultUdpTransportMapping$ListenThread.run(DefaultUdpTransportMapping.java:397)
at java.lang.Thread.run(Thread.java:748)
I think the reason for the exception thrown is the 'appShutdown'
notification confirmation packet comes *after* all resources are closed.
The packet is processed in DefaultUdpTransportMapping.ListenThread.run()
line-397 socketCopy.receive(packet).
This method throws SocketException because the resources are closed, and
the catch at line-455 re-throws RuntimeException.
As the result DefaultUdpTransportMapping.ListenThread is not stopped and
application fails to exit.
What would you suggest to fix the exception in this scenario?
Maybe additional boolean flag in TransportMapping could be added to
signal WorkerTask not to process any packets if TransportMapping is
closed?
Thanks,
Mark
_______________________________________________
SNMP4J mailing list
SNMP4J@agentpp.org
https://oosnmp.net/mailman/listinfo/snmp4j