org.acplt.oncrpc
Class OncRpcUdpSocketHelper

java.lang.Object
  extended by org.acplt.oncrpc.OncRpcUdpSocketHelper

public class OncRpcUdpSocketHelper
extends java.lang.Object

Wraps JRE-specific networking code for UDP/IP-based client sockets. So much for compile once, make it unuseable everywhere.

The following JRE-dependent methods are wrapped and will just do nothing or return fake information on old JRE plattforms. The number after each method wrapper indicates the first JRE version supporting a particular feature:

  • setSendBufferSize() -- 1.2
  • setReceiveBufferSize() -- 1.2
  • The following methods have been around since JDK 1.1, so we do not need to wrap them as we will never support JDK 1.0 -- let it rest in piece(s):


    Field Summary
    private  java.lang.reflect.Method methodGetReceiveBufferSize
              Method Socket.getReceiveBufferSize or null if not available in the class library of a particular JRE.
    private  java.lang.reflect.Method methodGetSendBufferSize
              Method Socket.getSendBufferSize or null if not available in the class library of a particular JRE.
    private  java.lang.reflect.Method methodSetReceiveBufferSize
              Method Socket.setReceiverBufferSize or null if not available in the class library of a particular JRE.
    private  java.lang.reflect.Method methodSetSendBufferSize
              Method Socket.setSendBufferSize or null if not available in the class library of a particular JRE.
    private  java.net.DatagramSocket socket
              The datagram socket for which we have to help out with some missing methods.
     
    Constructor Summary
    OncRpcUdpSocketHelper(java.net.DatagramSocket socket)
              Creates a datagram socket and binds it to an arbitrary available port on the local host machine.
     
    Method Summary
     int getReceiveBufferSize()
              Get size of receive buffer for this socket.
     int getSendBufferSize()
              Get size of send buffer for this socket.
    protected  void queryMethods()
              Looks up methods of class DatagramSocket whether they are supported by the class libraries of the JRE we are currently executing on.
     void setReceiveBufferSize(int size)
              Sets the socket's receive buffer size as a hint to the underlying transport layer to use appropriately sized I/O buffers.
     void setSendBufferSize(int size)
              Sets the socket's send buffer size as a hint to the underlying transport layer to use appropriately sized I/O buffers.
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    socket

    private java.net.DatagramSocket socket
    The datagram socket for which we have to help out with some missing methods.


    methodSetSendBufferSize

    private java.lang.reflect.Method methodSetSendBufferSize
    Method Socket.setSendBufferSize or null if not available in the class library of a particular JRE.


    methodSetReceiveBufferSize

    private java.lang.reflect.Method methodSetReceiveBufferSize
    Method Socket.setReceiverBufferSize or null if not available in the class library of a particular JRE.


    methodGetSendBufferSize

    private java.lang.reflect.Method methodGetSendBufferSize
    Method Socket.getSendBufferSize or null if not available in the class library of a particular JRE.


    methodGetReceiveBufferSize

    private java.lang.reflect.Method methodGetReceiveBufferSize
    Method Socket.getReceiveBufferSize or null if not available in the class library of a particular JRE.

    Constructor Detail

    OncRpcUdpSocketHelper

    public OncRpcUdpSocketHelper(java.net.DatagramSocket socket)
    Creates a datagram socket and binds it to an arbitrary available port on the local host machine.

    Method Detail

    setSendBufferSize

    public void setSendBufferSize(int size)
                           throws java.net.SocketException
    Sets the socket's send buffer size as a hint to the underlying transport layer to use appropriately sized I/O buffers. If the class libraries of the underlying JRE do not support setting the send buffer size, this is silently ignored.

    Parameters:
    size - The size to which to set the send buffer size. This value must be greater than 0.
    Throws:
    java.net.SocketException - if the socket's send buffer size could not be set, because the transport layer decided against accepting the new buffer size.
    java.lang.IllegalArgumentException - if size is 0 or negative.

    getSendBufferSize

    public int getSendBufferSize()
                          throws java.net.SocketException
    Get size of send buffer for this socket.

    Returns:
    Size of send buffer.
    Throws:
    java.net.SocketException - If the transport layer could not be queried for the size of this socket's send buffer.

    setReceiveBufferSize

    public void setReceiveBufferSize(int size)
                              throws java.net.SocketException
    Sets the socket's receive buffer size as a hint to the underlying transport layer to use appropriately sized I/O buffers. If the class libraries of the underlying JRE do not support setting the receive buffer size, this is silently ignored.

    Parameters:
    size - The size to which to set the receive buffer size. This value must be greater than 0.
    Throws:
    java.net.SocketException - if the socket's receive buffer size could not be set, because the transport layer decided against accepting the new buffer size.
    java.lang.IllegalArgumentException - if size is 0 or negative.

    getReceiveBufferSize

    public int getReceiveBufferSize()
                             throws java.net.SocketException
    Get size of receive buffer for this socket.

    Returns:
    Size of receive buffer.
    Throws:
    java.net.SocketException - If the transport layer could not be queried for the size of this socket's receive buffer.

    queryMethods

    protected void queryMethods()
    Looks up methods of class DatagramSocket whether they are supported by the class libraries of the JRE we are currently executing on.