java.net
Class ANEPSocket

java.lang.Object
  |
  +--java.net.ANEPSocket
Direct Known Subclasses:
MulticastANEPSocket

public class ANEPSocket
extends java.lang.Object

This class represents a socket for sending and receiving ANEP packets.

An ANEP socket is the sending or receiving point for a packet delivery service. Each packet sent or received on a ANEP socket is individually addressed and routed. Multiple packets sent from one machine to another may be routed differently, and may arrive in any order.

ANEP broadcasts sends and receives are always enabled on a ANEPSocket.

No security manager is implemented for ANEP.


Constructor Summary
ANEPSocket()
          Creates an ANEP socket, not bound.
ANEPSocket(int type)
          Constructs an ANEP socket and binds it to the specified type on the local host machine.
ANEPSocket(int type, InetAddress laddr)
          Creates an ANEP socket, bound to the specified local address.
ANEPSocket(int type, InetAddress laddr, boolean reuse)
          Creates an ANEP socket, bound to the specified local address.
 
Method Summary
 void allowOptionTypes(int[] optionTypes)
          Specify the list of option type the application known.
 void bind(int type, InetAddress laddr)
          Bind a socket, to listen for a type coming from the specified address.
 void close()
          Closes this ANEP socket.
 void connect(InetAddress address, int type)
          Connects the socket to a remote address for this socket.
 void disconnect()
          Disconnects the socket.
 int getFlowLabel()
          Get value of the flow label for this socket,
 InetAddress getInetAddress()
          Returns the address to which this socket is connected.
 InetAddress getLocalAddress()
          Gets the local address to which the socket is bound.
 int getLocalType()
          Gets the local type to which the socket is bound.
 int getNetAuthenticate()
          Get value of the IPV6_AUTH_NETWORK_LEVEL option for this socket, that is the AH policy in tunnel mode that is applied on the socket.
 int getNetEncryption()
          Get value of the IPV6_ESP_NETWORK_LEVEL option for this socket, that is the ESP policy in tunnel mode that is applied on the socket.
 int getReceiveBufferSize()
          Get value of the SO_RCVBUF option for this socket, that is the buffer size used by the platform for input on the this Socket.
 int getSendBufferSize()
          Get value of the SO_SNDBUF option for this socket, that is the buffer size used by the platform for output on the this Socket.
 int getSoReuse()
          Get the value of SO_REUSEADDR (which allow to reuse the same addresse/type).
 int getSoTimeout()
          Retrive setting for SO_TIMEOUT.
 int getTrafficClass()
          Get value of the traffic class for this socket,
 int getTransportAuthenticate()
          Get value of the IPV6_AUTH_TRANS_LEVEL option for this socket, that is the AH policy in transport that is applied on the socket.
 int getTransportEncryption()
          Get value of the IPV6_ESP_TRANS_LEVEL option for this socket, that is the ESP policy in transport mode that is applied on the socket.
 int getType()
          Returns the type for this socket.
 void receive(ANEPPacket p)
          Receives an ANEP packet from this socket.
 void send(ANEPPacket p)
          Sends a ANEP packet from this socket.
 void setANEPDiscard(int value)
          Set the discard bit on every packet send, except if stated otherwise in the packet itself.
 void setFlowLabel(int value)
          Set value of the flow label for this socket,
 void setNetAuthenticate(int value)
          Set value of the IPV6_AH_NETWORK_LEVEL option for this socket, that is the ESP policy in tunnel mode to apply on the socket.
 void setNetEncryption(int value)
          Set value of the IPV6_ESP_NETWORK_LEVEL option for this socket, that is the ESP policy in tunnel mode to apply on the socket.
 void setReceiveBufferSize(int size)
          Sets the SO_RCVBUF option to the specified value for this ANEPSocket.
 void setSendBufferSize(int size)
          Sets the SO_SNDBUF option to the specified value for this ANEPSocket.
 void setSoReuse(int value)
          Allow to reuse the same addresse/type.
 void setSoTimeout(int timeout)
          Enable/disable SO_TIMEOUT with the specified timeout, in milliseconds.
 void setTrafficClass(int value)
          Set value of the traffic class for this socket,
 void setTransportAuthenticate(int value)
          Set value of the IPV6_AH_TRANS_LEVEL option for this socket, that is the ESP policy in transport mode to apply on the socket.
 void setTransportEncryption(int value)
          Set value of the IPV6_ESP_TRANS_LEVEL option for this socket, that is the ESP policy in transport mode to apply on the socket.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ANEPSocket

public ANEPSocket(int type,
                  InetAddress laddr,
                  boolean reuse)
           throws java.io.IOException
Creates an ANEP socket, bound to the specified local address. The local type must be between 0 and 65535 inclusive.
Parameters:
type - local type to use
laddr - local address to bind
reuse - should we be allowed to reuse this address/type
Throws:
java.io.IOException - if the socket could not be opened.
BindException - if the socket could not bind to the specified local address/type.

ANEPSocket

public ANEPSocket(int type,
                  InetAddress laddr)
           throws java.io.IOException
Creates an ANEP socket, bound to the specified local address. The local type must be between 0 and 65535 inclusive.
Parameters:
type - local type to use
laddr - local address to bind
Throws:
java.io.IOException - if the socket could not be opened.
BindException - if the socket could not bind to the specified local type.

ANEPSocket

public ANEPSocket(int type)
           throws java.io.IOException
Constructs an ANEP socket and binds it to the specified type on the local host machine.
Parameters:
type - type to use.
Throws:
java.io.IOException - if the socket could not be opened.
BindException - if the socket could not bind to the specified local type.

ANEPSocket

public ANEPSocket()
           throws java.io.IOException
Creates an ANEP socket, not bound. This could be used when you only want to send data, otherwise you will need to call bind to be able to receive data.
Throws:
java.io.IOException - if the socket could not be opened
Method Detail

bind

public void bind(int type,
                 InetAddress laddr)
          throws java.io.IOException
Bind a socket, to listen for a type coming from the specified address.
Parameters:
type - local type to use
laddr - local address to bind
Throws:
BindException - if the socket could not bind to the specified local address/type.
java.io.IOException - otherwise.

connect

public void connect(InetAddress address,
                    int type)
Connects the socket to a remote address for this socket. When a socket is connected to a remote address, packets may only be sent to or received from that address. By default an ANEP socket is not connected.

On a send operation, if the packet's address is set and the packet's address and the socket's address do not match, an IllegalArgumentException will be thrown. A socket connected to a multicast address may only be used to send packets.

Parameters:
address - the remote address for the socket
type - the remote type for the socket.
Throws:
java.lang.IllegalArgumentException - if the address is invalid or the type is out of range.
See Also:
disconnect(), send(java.net.ANEPPacket), receive(java.net.ANEPPacket)

disconnect

public void disconnect()
Disconnects the socket. This does nothing if the socket is not connected.
See Also:
connect(java.net.InetAddress, int)

getInetAddress

public InetAddress getInetAddress()
Returns the address to which this socket is connected. Returns null if the socket is not connected.
Returns:
the address to which this socket is connected.

getType

public int getType()
Returns the type for this socket. Returns -1 if the socket is not connected.
Returns:
the type to which this socket is connected.

send

public void send(ANEPPacket p)
          throws java.io.IOException
Sends a ANEP packet from this socket. The ANEPPacket includes information indicating the data to be sent, its length, the IP address of the remote host, and the type on the remote host.
Parameters:
p - the ANEPPacket to be sent.
Throws:
java.io.IOException - if an I/O error occurs.
See Also:
ANEPPacket

receive

public void receive(ANEPPacket p)
             throws java.io.IOException
Receives an ANEP packet from this socket. When this method returns, the ANEPPacket's buffer is filled with the data received. The ANEP packet also contains the sender's IP address, and the packet type.

This method blocks until a datagram is received. The length field of the ANEP packet object contains the length of the received message. If the message is longer than the packet's length, the message is truncated.

Parameters:
p - the ANEPPacket into which to place the incoming data.
Throws:
java.io.IOException - if an I/O error occurs.
See Also:
ANEPPacket, ANEPSocket

getLocalAddress

public InetAddress getLocalAddress()
Gets the local address to which the socket is bound.

getLocalType

public int getLocalType()
Gets the local type to which the socket is bound.

setSoTimeout

public void setSoTimeout(int timeout)
                  throws java.net.SocketException
Enable/disable SO_TIMEOUT with the specified timeout, in milliseconds. With this option set to a non-zero timeout, a call to receive() for this ANEPSocket will block for only this amount of time. If the timeout expires, a java.io.InterruptedIOException is raised. The option must be enabled prior to entering the blocking operation to have effect. The timeout must be > 0. A timeout of zero is interpreted as an infinite timeout.

getSoTimeout

public int getSoTimeout()
                 throws java.net.SocketException
Retrive setting for SO_TIMEOUT. 0 returns implies that the option is disabled (i.e., timeout of infinity).

setSendBufferSize

public void setSendBufferSize(int size)
                       throws java.net.SocketException
Sets the SO_SNDBUF option to the specified value for this ANEPSocket. The SO_SNDBUF option is used by the platform's networking code as a hint for the size to use to allocate set the underlying network I/O buffers.

Increasing buffer size can increase the performance of network I/O for high-volume connection, while decreasing it can help reduce the backlog of incoming data. For UDP, this sets the maximum size of a packet that may be sent on this socket.

Because SO_SNDBUF is a hint, applications that want to verify what size the buffers were set to should call getSendBufferSize.

Parameters:
size - the size to which to set the send buffer size. This value must be greater than 0.
Throws:
java.lang.IllegalArgumentException - if the value is 0 or is negative.

getSendBufferSize

public int getSendBufferSize()
                      throws java.net.SocketException
Get value of the SO_SNDBUF option for this socket, that is the buffer size used by the platform for output on the this Socket.
See Also:
setSendBufferSize(int)

setReceiveBufferSize

public void setReceiveBufferSize(int size)
                          throws java.net.SocketException
Sets the SO_RCVBUF option to the specified value for this ANEPSocket. The SO_RCVBUF option is used by the platform's networking code as a hint for the size to use to allocate set the underlying network I/O buffers.

Increasing buffer size can increase the performance of network I/O for high-volume connection, while decreasing it can help reduce the backlog of incoming data. For UDP, this sets the maximum size of a packet that may be sent on this socket.

Because SO_RCVBUF is a hint, applications that want to verify what size the buffers were set to should call getReceiveBufferSize.

Parameters:
size - the size to which to set the receive buffer size. This value must be greater than 0.
Throws:
java.lang.IllegalArgumentException - if the value is 0 or is negative.

getReceiveBufferSize

public int getReceiveBufferSize()
                         throws java.net.SocketException
Get value of the SO_RCVBUF option for this socket, that is the buffer size used by the platform for input on the this Socket.
See Also:
setReceiveBufferSize(int)

close

public void close()
Closes this ANEP socket.

allowOptionTypes

public void allowOptionTypes(int[] optionTypes)
                      throws java.net.SocketException
Specify the list of option type the application known. Based on this list incoming packet with option type not known by the application will either result int discarding the packet or ignoring the option.

Even if allowed by the method, it is not a good idea to specify more than once the same type.

Parameters:
optionTypes - an array of option type to accept
See Also:
ANEPOptionType

setANEPDiscard

public void setANEPDiscard(int value)
                    throws java.net.SocketException
Set the discard bit on every packet send, except if stated otherwise in the packet itself.
Parameters:
value - if not null packet will be discarded
See Also:
ANEPPacket

setSoReuse

public void setSoReuse(int value)
                throws java.net.SocketException
Allow to reuse the same addresse/type.
Parameters:
value - if not null reuse is allowed
See Also:
ANEPPacket

setNetEncryption

public void setNetEncryption(int value)
                      throws java.net.SocketException
Set value of the IPV6_ESP_NETWORK_LEVEL option for this socket, that is the ESP policy in tunnel mode to apply on the socket.
Parameters:
value - value of the policy to apply on the socket
See Also:
getNetEncryption()

setTransportEncryption

public void setTransportEncryption(int value)
                            throws java.net.SocketException
Set value of the IPV6_ESP_TRANS_LEVEL option for this socket, that is the ESP policy in transport mode to apply on the socket.
Parameters:
value - value of the policy to apply on the socket
See Also:
getTransportEncryption()

setNetAuthenticate

public void setNetAuthenticate(int value)
                        throws java.net.SocketException
Set value of the IPV6_AH_NETWORK_LEVEL option for this socket, that is the ESP policy in tunnel mode to apply on the socket.
Parameters:
value - value of the policy to apply on the socket
See Also:
#getNetworkAuthenticate

setTransportAuthenticate

public void setTransportAuthenticate(int value)
                              throws java.net.SocketException
Set value of the IPV6_AH_TRANS_LEVEL option for this socket, that is the ESP policy in transport mode to apply on the socket.
Parameters:
value - value of the policy to apply on the socket
See Also:
getTransportAuthenticate()

getSoReuse

public int getSoReuse()
               throws java.net.SocketException
Get the value of SO_REUSEADDR (which allow to reuse the same addresse/type).
See Also:
ANEPPacket, setSoReuse(int)

getNetEncryption

public int getNetEncryption()
                     throws java.net.SocketException
Get value of the IPV6_ESP_NETWORK_LEVEL option for this socket, that is the ESP policy in tunnel mode that is applied on the socket.
See Also:
setNetEncryption(int)

getTransportEncryption

public int getTransportEncryption()
                           throws java.net.SocketException
Get value of the IPV6_ESP_TRANS_LEVEL option for this socket, that is the ESP policy in transport mode that is applied on the socket.
See Also:
setTransportEncryption(int)

getNetAuthenticate

public int getNetAuthenticate()
                       throws java.net.SocketException
Get value of the IPV6_AUTH_NETWORK_LEVEL option for this socket, that is the AH policy in tunnel mode that is applied on the socket.
See Also:
setNetAuthenticate(int)

getTransportAuthenticate

public int getTransportAuthenticate()
                             throws java.net.SocketException
Get value of the IPV6_AUTH_TRANS_LEVEL option for this socket, that is the AH policy in transport that is applied on the socket.
See Also:
setTransportAuthenticate(int)

setFlowLabel

public void setFlowLabel(int value)
                  throws java.net.SocketException
Set value of the flow label for this socket,
Parameters:
value - value of the flow label
See Also:
getFlowLabel()

setTrafficClass

public void setTrafficClass(int value)
                     throws java.net.SocketException
Set value of the traffic class for this socket,
Parameters:
value - value of the traffic class
See Also:
getTrafficClass()

getFlowLabel

public int getFlowLabel()
                 throws java.net.SocketException
Get value of the flow label for this socket,
See Also:
setFlowLabel(int)

getTrafficClass

public int getTrafficClass()
                    throws java.net.SocketException
Get value of the traffic class for this socket,
See Also:
setTrafficClass(int)