Class DefaultUdpTransportMapping

All Implemented Interfaces:
TransportMapping<UdpAddress>

public class DefaultUdpTransportMapping extends UdpTransportMapping
The DefaultUdpTransportMapping implements a UDP transport mapping based on Java standard IO and using an internal thread for listening on the inbound socket.
Version:
1.9
Author:
Frank Fock
  • Field Details

    • socket

      protected DatagramSocket socket
    • listener

      protected WorkerTask listener
    • listenerThread

      protected org.snmp4j.transport.DefaultUdpTransportMapping.ListenThread listenerThread
  • Constructor Details

    • DefaultUdpTransportMapping

      public DefaultUdpTransportMapping() throws IOException
      Creates a UDP transport with an arbitrary local port on all local interfaces.
      Throws:
      IOException - if socket binding fails.
    • DefaultUdpTransportMapping

      public DefaultUdpTransportMapping(UdpAddress udpAddress, boolean reuseAddress) throws IOException
      Creates a UDP transport with optional reusing the address if is currently in timeout state (TIME_WAIT) after the connection is closed.
      Parameters:
      udpAddress - the local address for sending and receiving of UDP messages.
      reuseAddress - if true addresses are reused which provides faster socket binding if an application is restarted for instance.
      Throws:
      IOException - if socket binding fails.
      Since:
      1.7.3
    • DefaultUdpTransportMapping

      public DefaultUdpTransportMapping(UdpAddress udpAddress) throws IOException
      Creates a UDP transport on the specified address. The address will not be reused if it is currently in timeout state (TIME_WAIT).
      Parameters:
      udpAddress - the local address for sending and receiving of UDP messages.
      Throws:
      IOException - if socket binding fails.
  • Method Details

    • sendMessage

      public void sendMessage(UdpAddress targetAddress, byte[] message, TransportStateReference tmStateReference) throws IOException
      Description copied from interface: TransportMapping
      Sends a message to the supplied address using this transport.
      Specified by:
      sendMessage in interface TransportMapping<UdpAddress>
      Specified by:
      sendMessage in class UdpTransportMapping
      Parameters:
      targetAddress - an Address instance denoting the target address.
      message - the whole message as an array of bytes.
      tmStateReference - the (optional) transport model state reference as defined by RFC 5590 section 6.1.
      Throws:
      IOException - if any underlying IO operation fails.
    • close

      public void close() throws IOException
      Closes the socket and stops the listener thread.
      Specified by:
      close in interface TransportMapping<UdpAddress>
      Specified by:
      close in class UdpTransportMapping
      Throws:
      IOException - if the socket cannot be closed.
    • listen

      public void listen() throws IOException
      Starts the listener thread that accepts incoming messages. The thread is started in daemon mode and thus it will not block application terminated. Nevertheless, the close() method should be called to stop the listen thread gracefully and free associated ressources.
      Specified by:
      listen in interface TransportMapping<UdpAddress>
      Specified by:
      listen in class UdpTransportMapping
      Throws:
      IOException - if the listen port could not be bound to the server thread.
    • setPriority

      public void setPriority(int newPriority)
      Changes the priority of the listen thread for this UDP transport mapping. This method has no effect, if called before listen() has been called for this transport mapping.
      Parameters:
      newPriority - the new priority.
      Since:
      1.2.2
      See Also:
    • getPriority

      public int getPriority()
      Returns the priority of the internal listen thread.
      Returns:
      a value between Thread.MIN_PRIORITY and Thread.MAX_PRIORITY.
      Since:
      1.2.2
    • setThreadName

      public void setThreadName(String name)
      Sets the name of the listen thread for this UDP transport mapping. This method has no effect, if called before listen() has been called for this transport mapping.
      Parameters:
      name - the new thread name.
      Since:
      1.6
    • getThreadName

      public String getThreadName()
      Returns the name of the listen thread.
      Returns:
      the thread name if in listening mode, otherwise null.
      Since:
      1.6
    • setMaxInboundMessageSize

      public void setMaxInboundMessageSize(int maxInboundMessageSize)
    • getSocketTimeout

      public int getSocketTimeout()
      Returns the socket timeout. 0 returns implies that the option is disabled (i.e., timeout of infinity).
      Returns:
      the socket timeout setting.
    • getReceiveBufferSize

      public int getReceiveBufferSize()
      Gets the requested receive buffer size for the underlying UDP socket. This size might not reflect the actual size of the receive buffer, which is implementation specific.
      Returns:
      <=0 if the default buffer size of the OS is used, or a value >0 if the user specified a buffer size.
    • setReceiveBufferSize

      public void setReceiveBufferSize(int receiveBufferSize)
      Sets the receive buffer size, which should be greater than the maximum inbound message size. This method has to be called before listen() to be effective.
      Parameters:
      receiveBufferSize - an integer value >0 and > AbstractTransportMapping.getMaxInboundMessageSize().
    • setSocketTimeout

      public void setSocketTimeout(int socketTimeout)
      Sets the socket timeout in milliseconds.
      Parameters:
      socketTimeout - the socket timeout for incoming messages in milliseconds. A timeout of zero is interpreted as an infinite timeout.
    • isListening

      public boolean isListening()
      Description copied from interface: TransportMapping
      Returns true if the transport mapping is listening for incoming messages. For connection oriented transport mappings this is a prerequisite to be able to send SNMP messages. For connectionless transport mappings it is a prerequisite to be able to receive responses.
      Returns:
      true if this transport mapping is listening for messages.
    • getListenAddress

      public UdpAddress getListenAddress()
      Description copied from interface: TransportMapping
      Returns the address that represents the actual incoming address this transport mapping uses to listen for incoming packets.
      Specified by:
      getListenAddress in interface TransportMapping<UdpAddress>
      Overrides:
      getListenAddress in class UdpTransportMapping
      Returns:
      the address for incoming packets or null this transport mapping is not configured to listen for incoming packets.
    • renewSocketAfterException

      protected DatagramSocket renewSocketAfterException(SocketException socketException, DatagramSocket failedSocket) throws SocketException
      If receiving new datagrams fails with a SocketException, this method is called to renew the socket - if possible.
      Parameters:
      socketException - the exception that occurred.
      failedSocket - the socket that caused the exception. By default, he socket will be closed in order to be able to reopen it. Implementations may also try to reuse the socket, in dependence of the socketException.
      Returns:
      the new socket or null if the listen thread should be terminated with the provided exception.
      Throws:
      SocketException - a new socket exception if the socket could not be renewed.
      Since:
      2.2.2