All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.barchart.udt.net.IceServerSocket Maven / Gradle / Ivy

The newest version!
/**
 * Copyright (C) 2009-2013 Barchart, Inc. 
 *
 * All rights reserved. Licensed under the OSI BSD License.
 *
 * http://www.opensource.org/licenses/bsd-license.php
 */
package com.barchart.udt.net;

import java.io.IOException;
import java.net.InetAddress;
import java.net.Socket;
import java.net.SocketAddress;
import java.net.SocketException;
import java.net.SocketTimeoutException;
import java.nio.channels.ServerSocketChannel;

/**
 * compatibility verification interface
 */
public interface IceServerSocket {

	/**
	 * 
	 * Binds the ServerSocket to a specific address (IP address and
	 * port number).
	 * 

* If the address is null, then the system will pick up an * ephemeral port and a valid local address to bind the socket. *

* * @param endpoint * The IP address & port number to bind to. * @throws IOException * if the bind operation fails, or if the socket is already * bound. * @throws SecurityException * if a SecurityManager is present and its * checkListen method doesn't allow the operation. * @throws IllegalArgumentException * if endpoint is a SocketAddress subclass not supported by this * socket * @since 1.4 */ void bind(SocketAddress endpoint) throws IOException; /** * * Binds the ServerSocket to a specific address (IP address and * port number). *

* If the address is null, then the system will pick up an * ephemeral port and a valid local address to bind the socket. *

* The backlog argument must be a positive value greater than * 0. If the value passed if equal or less than 0, then the default value * will be assumed. * * @param endpoint * The IP address & port number to bind to. * @param backlog * The listen backlog length. * @throws IOException * if the bind operation fails, or if the socket is already * bound. * @throws SecurityException * if a SecurityManager is present and its * checkListen method doesn't allow the operation. * @throws IllegalArgumentException * if endpoint is a SocketAddress subclass not supported by this * socket * @since 1.4 */ void bind(SocketAddress endpoint, int backlog) throws IOException; /** * Returns the local address of this server socket. * * @return the address to which this socket is bound, or null * if the socket is unbound. */ InetAddress getInetAddress(); /** * Returns the port on which this socket is listening. * * @return the port number to which this socket is listening or -1 if the * socket is not bound yet. */ int getLocalPort(); /** * Returns the address of the endpoint this socket is bound to, or * null if it is not bound yet. * * @return a SocketAddress representing the local endpoint of * this socket, or null if it is not bound yet. * @see #getInetAddress() * @see #getLocalPort() * @see #bind(SocketAddress) * @since 1.4 */ SocketAddress getLocalSocketAddress(); /** * Listens for a connection to be made to this socket and accepts it. The * method blocks until a connection is made. * *

* A new Socket s is created and, if there is a security * manager, the security manager's checkAccept method is called * with s.getInetAddress().getHostAddress() and * s.getPort() as its arguments to ensure the operation is * allowed. This could result in a SecurityException. * * @exception IOException * if an I/O error occurs when waiting for a connection. * @exception SecurityException * if a security manager exists and its * checkAccept method doesn't allow the * operation. * @exception SocketTimeoutException * if a timeout was previously set with setSoTimeout and the * timeout has been reached. * @exception java.nio.channels.IllegalBlockingModeException * if this socket has an associated channel, the channel is * in non-blocking mode, and there is no connection ready to * be accepted * * @return the new Socket * @see SecurityManager#checkAccept revised 1.4 spec JSR-51 */ Socket accept() throws IOException; /** * Closes this socket. * * Any thread currently blocked in {@link #accept()} will throw a * {@link SocketException}. * *

* If this socket has an associated channel then the channel is closed as * well. * * @exception IOException * if an I/O error occurs when closing the socket. revised * 1.4 spec JSR-51 */ void close() throws IOException; /** * Returns the unique {@link java.nio.channels.ServerSocketChannel} object * associated with this socket, if any. * *

* A server socket will have a channel if, and only if, the channel itself * was created via the {@link java.nio.channels.ServerSocketChannel#open * ServerSocketChannel.open} method. * * @return the server-socket channel associated with this socket, or * null if this socket was not created for a channel * * @since 1.4 spec JSR-51 */ ServerSocketChannel getChannel(); /** * Returns the binding state of the ServerSocket. * * @return true if the ServerSocket succesfuly bound to an address * @since 1.4 */ boolean isBound(); /** * Returns the closed state of the ServerSocket. * * @return true if the socket has been closed * @since 1.4 */ boolean isClosed(); /** * Enable/disable SO_TIMEOUT with the specified timeout, in milliseconds. * With this option set to a non-zero timeout, a call to accept() for this * ServerSocket will block for only this amount of time. If the timeout * expires, a java.net.SocketTimeoutException is raised, though the * ServerSocket is still valid. 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. * * @param timeout * the specified timeout, in milliseconds * @exception SocketException * if there is an error in the underlying protocol, such as a * TCP error. * @since JDK1.1 * @see #getSoTimeout() */ void setSoTimeout(int timeout) throws SocketException; /** * Retrieve setting for SO_TIMEOUT. 0 returns implies that the option is * disabled (i.e., timeout of infinity). * * @return the SO_TIMEOUT value * @exception IOException * if an I/O error occurs * @since JDK1.1 * @see #setSoTimeout(int) */ int getSoTimeout() throws IOException; /** * Enable/disable the SO_REUSEADDR socket option. *

* When a TCP connection is closed the connection may remain in a timeout * state for a period of time after the connection is closed (typically * known as the TIME_WAIT state or 2MSL wait state). For * applications using a well known socket address or port it may not be * possible to bind a socket to the required SocketAddress if there * is a connection in the timeout state involving the socket address or * port. *

* Enabling SO_REUSEADDR prior to binding the socket using * {@link #bind(SocketAddress)} allows the socket to be bound even though a * previous connection is in a timeout state. *

* When a ServerSocket is created the initial setting of * SO_REUSEADDR is not defined. Applications can use * {@link #getReuseAddress()} to determine the initial setting of * SO_REUSEADDR. *

* The behaviour when SO_REUSEADDR is enabled or disabled after a * socket is bound (See {@link #isBound()}) is not defined. * * @param on * whether to enable or disable the socket option * @exception SocketException * if an error occurs enabling or disabling the * SO_RESUEADDR socket option, or the socket is * closed. * @since 1.4 * @see #getReuseAddress() * @see #bind(SocketAddress) * @see #isBound() * @see #isClosed() */ void setReuseAddress(boolean on) throws SocketException; /** * Tests if SO_REUSEADDR is enabled. * * @return a boolean indicating whether or not SO_REUSEADDR is * enabled. * @exception SocketException * if there is an error in the underlying protocol, such as a * TCP error. * @since 1.4 * @see #setReuseAddress(boolean) */ boolean getReuseAddress() throws SocketException; /** * Returns the implementation address and implementation port of this socket * as a String. * * @return a string representation of this socket. */ @Override String toString(); /** * Sets a default proposed value for the SO_RCVBUF option for sockets * accepted from this ServerSocket. The value actually set in the * accepted socket must be determined by calling * {@link Socket#getReceiveBufferSize()} after the socket is returned by * {@link #accept()}. *

* The value of SO_RCVBUF is used both to set the size of the internal * socket receive buffer, and to set the size of the TCP receive window that * is advertized to the remote peer. *

* It is possible to change the value subsequently, by calling * {@link Socket#setReceiveBufferSize(int)}. However, if the application * wishes to allow a receive window larger than 64K bytes, as defined by * RFC1323 then the proposed value must be set in the ServerSocket * before it is bound to a local address. This implies, that the * ServerSocket must be created with the no-argument constructor, then * setReceiveBufferSize() must be called and lastly the ServerSocket is * bound to an address by calling bind(). *

* Failure to do this will not cause an error, and the buffer size may be * set to the requested value but the TCP receive window in sockets accepted * from this ServerSocket will be no larger than 64K bytes. * * @exception SocketException * if there is an error in the underlying protocol, such as a * TCP error. * * @param size * the size to which to set the receive buffer size. This value * must be greater than 0. * * @exception IllegalArgumentException * if the value is 0 or is negative. * * @since 1.4 * @see #getReceiveBufferSize */ void setReceiveBufferSize(int size) throws SocketException; /** * Gets the value of the SO_RCVBUF option for this ServerSocket, * that is the proposed buffer size that will be used for Sockets accepted * from this ServerSocket. * *

* Note, the value actually set in the accepted socket is determined by * calling {@link Socket#getReceiveBufferSize()}. * * @return the value of the SO_RCVBUF option for this Socket. * @exception SocketException * if there is an error in the underlying protocol, such as a * TCP error. * @see #setReceiveBufferSize(int) * @since 1.4 */ int getReceiveBufferSize() throws SocketException; /** * Sets performance preferences for this ServerSocket. * *

* Sockets use the TCP/IP protocol by default. Some implementations may * offer alternative protocols which have different performance * characteristics than TCP/IP. This method allows the application to * express its own preferences as to how these tradeoffs should be made when * the implementation chooses from the available protocols. * *

* Performance preferences are described by three integers whose values * indicate the relative importance of short connection time, low latency, * and high bandwidth. The absolute values of the integers are irrelevant; * in order to choose a protocol the values are simply compared, with larger * values indicating stronger preferences. If the application prefers short * connection time over both low latency and high bandwidth, for example, * then it could invoke this method with the values (1, 0, 0). If * the application prefers high bandwidth above low latency, and low latency * above short connection time, then it could invoke this method with the * values (0, 1, 2). * *

* Invoking this method after this socket has been bound will have no * effect. This implies that in order to use this capability requires the * socket to be created with the no-argument constructor. * * @param connectionTime * An int expressing the relative importance of a short * connection time * * @param latency * An int expressing the relative importance of low * latency * * @param bandwidth * An int expressing the relative importance of high * bandwidth * * @since 1.5 */ void setPerformancePreferences(int connectionTime, int latency, int bandwidth); }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy