Package org.acplt.oncrpc

## Class OncRpcUdpSocketHelper

- java.lang.Object
- - 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):

- getTcpNoDelay() / setTcpNoDelay()
- getSoTimeout() / setSoTimeout()

Version:
  $Header: /cvsroot/remotetea/remotetea/src/org/acplt/oncrpc/OncRpcUdpSocketHelper.java,v 1.3 2007/05/29 19:45:46 haraldalbrecht Exp $
Author:
  Harald Albrecht

- - ### Field Summary

    Fields
    Modifier and Type | Field | Description
    --- | --- | ---
    `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

    Constructors
    Constructor | Description
    --- | ---
    `OncRpcUdpSocketHelper​(java.net.DatagramSocket socket)` | Creates a datagram socket and binds it to an arbitrary available port on the local host machine.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `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.