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
`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 and 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

Methods
`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.