2002-09-25 Michael Koch <konqueror@gmx.de>

* java/net/DatagramSocket.java
	(DatagramSocket): Exception documentation added.
	(bind): Exception documentation added, addded SecurityManager check,
	added SocketAddress type check.
	(getSoTimeout): Check impl.
	(receive): Fix SecurityManager check, check impl, documentation added.
	(send): Check channel mode, documentation added.
	(connect): New method.
	(disconnect): Implemented.
	(getLocalSocketAddress): New method.
	(getReceiveBufferSize): Check impl.
	(setReuseAddress): Check impl.
	(getReuseAddress): Check impl.
	(setBroadcast): Check impl.
	(getBroadcast): Check impl.
	(setTrafficClass): Check impl, Documentation cleared.
	(getTrafficClass): Check impl.
	(getSendBufferSize): Check impl.
	(setReceiveBufferSize): Check impl, documentation added.
	(setSendBufferSize): Documentation added.
	(setDatagramSocketImplFactory): New method.
	* java/net/HttpURLConnection.java
	(HTTP_INTERNAL_ERROR): The correct code is 500.
	(HTTP_NOT_IMPLEMENTED): Added new constant.
	(setFollowRedirects): Documentation added.
	(getInstanceFollowRedirects): New method.
	(setInstanceFollowRedirects): New method.
	(setRequestMethod): Documentation added.
	(getResponseCode): Documentation added.
	(getResponseMessage): Documentation added.
	* java/net/JarURLConnection.java
	(JarURLConnection): protected since JDK 1.4.
	(getJarEntry): java.io.IOException to IOException, documentation added.
	(getJarFile): Documentation added.
	* java/net/ServerSocket.java
	(ServerSocket): Private to public, exception added.
	(ServerSocket): java.io.IOException to IOException, documentation added.
	(bind): Check socket address type, documentation added.
	(bind): java.io.IOException to IOException, documentation added.
	(accept): Documentation added.
	(implAccept): Check ch is not non-blocking, documentation added.
	(setSoTimeout): Documentation fixed.
	(setReceiveBufferSize): Documentation added.
	* java/net/Socket.java
	(Socket): Documentation added.
	(bind): Documentation added.
	(connect): Check socket address type, documentation added.
	(getRemoteSocketAddress): New method.

From-SVN: r57494
This commit is contained in:
Michael Koch 2002-09-25 09:05:53 +00:00 committed by Michael Koch
parent 33c31b33b5
commit df79dc1a89
10 changed files with 601 additions and 28 deletions

View file

@ -9,8 +9,10 @@ Libgcj License. Please consult the file "LIBGCJ_LICENSE" for
details. */
package java.net;
import java.io.IOException;
import java.nio.channels.DatagramChannel;
import java.nio.channels.IllegalBlockingModeException;
/**
* @author Warren Levy <warrenl@cygnus.com>
@ -25,10 +27,23 @@ import java.nio.channels.DatagramChannel;
public class DatagramSocket
{
/**
* This is the user DatagramSocketImplFactory for this class. If this
* variable is null, a default factory is used.
*/
static DatagramSocketImplFactory factory;
DatagramSocketImpl impl;
DatagramChannel ch;
/**
* Creates a DatagramSocket
*
* @exception SocketException If an error occurs
* @exception SecurityException If a security manager exists and
* its checkListen method doesn't allow the operation
*/
public DatagramSocket() throws SocketException
{
this(0, null);
@ -52,6 +67,8 @@ public class DatagramSocket
* @param bindaddr The socket address to bind to
*
* @exception SocketException If an error occurs
* @exception SecurityException If a security manager exists and
* its checkListen method doesn't allow the operation
*
* @since 1.4
*/
@ -68,6 +85,8 @@ public class DatagramSocket
* @param port The port number to bind to
*
* @exception SocketException If an error occurs
* @exception SecurityException If a security manager exists and
* its checkListen method doesn't allow the operation
*/
public DatagramSocket(int port) throws SocketException
{
@ -81,6 +100,8 @@ public class DatagramSocket
* @param laddr The local address to bind to
*
* @exception SocketException If an error occurs
* @exception SecurityException If a security manager exists and
* its checkListen method doesn't allow the operation
*/
public DatagramSocket(int port, InetAddress laddr) throws SocketException
{
@ -121,13 +142,24 @@ public class DatagramSocket
* @param address The socket address to bind to
*
* @exception SocketException If an error occurs
* @exception SecurityException If a security manager exists and
* its checkListen method doesn't allow the operation
* @exception IllegalArgumentException If address type is not supported
*
* @since 1.4
*/
public void bind (SocketAddress address)
throws SocketException
{
if (! (address instanceof InetSocketAddress))
throw new IllegalArgumentException ();
InetSocketAddress tmp = (InetSocketAddress) address;
SecurityManager s = System.getSecurityManager ();
if (s != null)
s.checkListen(tmp.getPort ());
impl.bind (tmp.getPort (), tmp.getAddress ());
}
@ -139,6 +171,16 @@ public class DatagramSocket
impl.close();
}
/**
* Checks if the datagram socket is closed
*
* @since 1.4
*/
public boolean isClosed()
{
return !impl.getFileDescriptor().valid();
}
/**
* Gets a datagram channel assoziated with the socket
*
@ -213,6 +255,9 @@ public class DatagramSocket
*/
public synchronized int getSoTimeout() throws SocketException
{
if (impl == null)
throw new SocketException ("Cannot initialize Socket implementation");
Object timeout = impl.getOption(SocketOptions.SO_TIMEOUT);
if (timeout instanceof Integer)
return ((Integer)timeout).intValue();
@ -226,12 +271,25 @@ public class DatagramSocket
* @param p The datagram packet to put the incoming data into
*
* @exception IOException If an error occurs
* @exception SocketTimeoutException If setSoTimeout was previously called
* and the timeout has expired
* @exception PortUnreachableException If the socket is connected to a
* currently unreachable destination. Note, there is no guarantee that the
* exception will be thrown
* @exception IllegalBlockingModeException If this socket has an associated
* channel, and the channel is in non-blocking mode
*/
public synchronized void receive(DatagramPacket p) throws IOException
{
SecurityManager s = System.getSecurityManager();
if (s != null)
s.checkAccept(p.getAddress().getHostAddress(), p.getPort());
s.checkAccept (p.getAddress().getHostName (), p.getPort ());
if (impl == null)
throw new IOException ("Cannot initialize Socket implementation");
if (ch != null && !ch.isBlocking ())
throw new IllegalBlockingModeException ();
impl.receive(p);
}
@ -242,6 +300,13 @@ public class DatagramSocket
* @param p The datagram packet to send
*
* @exception IOException If an error occurs
* @exception SecurityException If a security manager exists and its
* checkMulticast or checkConnect method doesn't allow the send
* @exception PortUnreachableException If the socket is connected to a
* currently unreachable destination. Note, there is no guarantee that the
* exception will be thrown
* @exception IllegalBlockingModeException If this socket has an associated
* channel, and the channel is in non-blocking mode
*/
public void send(DatagramPacket p) throws IOException
{
@ -249,15 +314,19 @@ public class DatagramSocket
SecurityManager s = System.getSecurityManager();
if (s != null)
{
InetAddress addr = p.getAddress();
if (addr.isMulticastAddress())
s.checkMulticast(addr);
else
s.checkConnect(addr.getHostAddress(), p.getPort());
InetAddress addr = p.getAddress();
if (addr.isMulticastAddress())
s.checkMulticast(addr);
else
s.checkConnect(addr.getHostAddress(), p.getPort());
}
// FIXME: if this is a subclass of MulticastSocket,
// use getTimeToLive for TTL val.
if (ch != null && !ch.isBlocking ())
throw new IllegalBlockingModeException ();
impl.send(p);
}
@ -285,6 +354,10 @@ public class DatagramSocket
* @param port The port to connect to
*
* @exception SocketException If an error occurs
* @exception IllegalArgumentException If address is null
* or the port number is illegal
* @exception SecurityException If the caller is not allowed to send
* datagrams to and receive datagrams from the address and port
*
* @since 1.2
*/
@ -294,6 +367,26 @@ public class DatagramSocket
//impl.connect(address, port);
}
/**
* Connects the datagram socket to a specified socket address.
*
* @param address The socket address to connect to
*
* @exception SocketException If an error occurs
* @exception IllegalArgumentException If address type is not supported
*
* @since 1.4
*/
public void connect (SocketAddress address) throws SocketException
{
if ( !(address instanceof InetSocketAddress) )
throw new IllegalArgumentException (
"SocketAddress is not InetSocketAddress");
InetSocketAddress tmp = (InetSocketAddress) address;
connect( tmp.getAddress(), tmp.getPort());
}
/**
* Disconnects the datagram socket
*
@ -301,7 +394,7 @@ public class DatagramSocket
*/
public void disconnect()
{
//impl.disconnect();
impl.disconnect();
}
/**
@ -345,6 +438,28 @@ public class DatagramSocket
return impl.localPort;
}
/**
* Returns the local SocketAddress this socket is bound to
* or null if it is not bound
*
* @since 1.4
*/
public SocketAddress getLocalSocketAddress()
{
InetAddress addr;
try
{
addr = (InetAddress) impl.getOption (SocketOptions.SO_BINDADDR);
}
catch (SocketException e)
{
return null;
}
return new InetSocketAddress (addr, impl.localPort);
}
/**
* This method returns the value of the system level socket option
* SO_RCVBUF, which is used by the operating system to tune buffer
@ -358,6 +473,9 @@ public class DatagramSocket
*/
public int getReceiveBufferSize() throws SocketException
{
if (impl == null)
throw new SocketException ("Cannot initialize Socket implementation");
Object obj = impl.getOption(SocketOptions.SO_RCVBUF);
if (obj instanceof Integer)
@ -377,6 +495,9 @@ public class DatagramSocket
*/
public void setReuseAddress(boolean on) throws SocketException
{
if (impl == null)
throw new SocketException ("Cannot initialize Socket implementation");
impl.setOption (SocketOptions.SO_REUSEADDR, new Boolean (on));
}
@ -389,6 +510,9 @@ public class DatagramSocket
*/
public boolean getReuseAddress() throws SocketException
{
if (impl == null)
throw new SocketException ("Cannot initialize Socket implementation");
Object obj = impl.getOption (SocketOptions.SO_REUSEADDR);
if (obj instanceof Boolean)
@ -408,6 +532,9 @@ public class DatagramSocket
*/
public void setBroadcast(boolean on) throws SocketException
{
if (impl == null)
throw new SocketException ("Cannot initialize Socket implementation");
impl.setOption (SocketOptions.SO_BROADCAST, new Boolean (on));
}
@ -420,6 +547,9 @@ public class DatagramSocket
*/
public boolean getBroadcast() throws SocketException
{
if (impl == null)
throw new SocketException ("Cannot initialize Socket implementation");
Object obj = impl.getOption (SocketOptions.SO_BROADCAST);
if (obj instanceof Boolean)
@ -434,7 +564,7 @@ public class DatagramSocket
* @param tc The traffic class
*
* @exception SocketException If an error occurs
* @exception IllegalArgumentException If tc < 0 or rc > 255
* @exception IllegalArgumentException If tc value is illegal
*
* @see DatagramSocket:getTrafficClass
*
@ -443,6 +573,9 @@ public class DatagramSocket
public void setTrafficClass(int tc)
throws SocketException
{
if (impl == null)
throw new SocketException ("Cannot initialize Socket implementation");
if (tc < 0 || tc > 255)
throw new IllegalArgumentException();
@ -460,6 +593,9 @@ public class DatagramSocket
*/
public int getTrafficClass() throws SocketException
{
if (impl == null)
throw new SocketException( "Cannot initialize Socket implementation");
Object obj = impl.getOption(SocketOptions.IP_TOS);
if (obj instanceof Integer)
@ -481,6 +617,9 @@ public class DatagramSocket
*/
public int getSendBufferSize() throws SocketException
{
if (impl == null)
throw new SocketException ("Cannot initialize Socket implementation");
Object obj = impl.getOption(SocketOptions.SO_SNDBUF);
if (obj instanceof Integer)
@ -497,11 +636,15 @@ public class DatagramSocket
* @param size The new receive buffer size.
*
* @exception SocketException If an error occurs.
* @exception IllegalArgumentException If size is 0 or negative
*
* @since 1.2
*/
public void setReceiveBufferSize(int size) throws SocketException
{
if (impl == null)
throw new SocketException ("Cannot initialize Socket implementation");
if (size < 0)
throw new IllegalArgumentException("Buffer size is less than 0");
@ -516,6 +659,7 @@ public class DatagramSocket
* @param size The new send buffer size.
*
* @exception SocketException If an error occurs.
* @exception IllegalArgumentException If size is 0 or negative
*
* @since 1.2
*/
@ -526,4 +670,27 @@ public class DatagramSocket
impl.setOption(SocketOptions.SO_SNDBUF, new Integer(size));
}
/**
* Sets the datagram socket implementation factory for the application
*
* @param fac The factory to set
*
* @exception IOException If an error occurs
* @exception SocketException If the factory is already defined
* @exception SecurityException If a security manager exists and its
* checkSetFactory method doesn't allow the operation
*/
public static void setDatagramSocketImplFactory
(DatagramSocketImplFactory fac) throws IOException
{
if (factory != null)
throw new SocketException ("DatagramSocketImplFactory already defined");
SecurityManager sm = System.getSecurityManager();
if (sm != null)
sm.checkSetFactory();
factory = fac;
}
}

View file

@ -12,6 +12,7 @@ details. */
package java.net;
import java.io.*;
import java.security.Permission;
/**
* @author Warren Levy <warrenl@cygnus.com>
@ -64,7 +65,8 @@ public abstract class HttpURLConnection extends URLConnection
/* HTTP Server Error Response Codes */
public static final int HTTP_SERVER_ERROR = 500;
public static final int HTTP_INTERNAL_ERROR = 501;
public static final int HTTP_INTERNAL_ERROR = 500;
public static final int HTTP_NOT_IMPLEMENTED = 501;
public static final int HTTP_BAD_GATEWAY = 502;
public static final int HTTP_UNAVAILABLE = 503;
public static final int HTTP_GATEWAY_TIMEOUT = 504;
@ -88,6 +90,13 @@ public abstract class HttpURLConnection extends URLConnection
public abstract boolean usingProxy();
/**
* Sets whether HTTP redirects (requests with response code 3xx) should be
* automatically followed by this class. True by default
*
* @exception SecurityException If a security manager exists and its
* checkSetFactory method doesn't allow the operation
*/
public static void setFollowRedirects(boolean set)
{
// Throw an exception if an extant security mgr precludes
@ -104,6 +113,30 @@ public abstract class HttpURLConnection extends URLConnection
return followRedirects;
}
/**
* Returns the value of this HttpURLConnection's instanceFollowRedirects
* field
*/
public boolean getInstanceFollowRedirects ()
{
return instanceFollowRedirects;
}
/**
* Sets the value of this HttpURLConnection's instanceFollowRedirects field
*/
public void setInstanceFollowRedirects (boolean follow)
{
instanceFollowRedirects = follow;
}
/**
* Set the method for the URL request, one of:
* GET POST HEAD OPTIONS PUT DELETE TRACE are legal
*
* @exception ProtocolException If the method cannot be reset or if the
* requested method isn't valid for HTTP
*/
public void setRequestMethod(String method) throws ProtocolException
{
if (connected)
@ -123,6 +156,11 @@ public abstract class HttpURLConnection extends URLConnection
return method;
}
/**
* Gets the status code from an HTTP response message
*
* @exception IOException If an error occurs
*/
public int getResponseCode() throws IOException
{
if (!gotResponseVals)
@ -130,6 +168,12 @@ public abstract class HttpURLConnection extends URLConnection
return responseCode;
}
/**
* Gets the HTTP response message, if any, returned along with the
* response code from a server
*
* @exception IOException If an error occurs
*/
public String getResponseMessage() throws IOException
{
if (!gotResponseVals)

View file

@ -50,7 +50,14 @@ public abstract class JarURLConnection extends URLConnection
return element;
}
public JarURLConnection(URL url)
/**
* Creates a new JarURLConnection
*
* @exception MalformedURLException If url is invalid
*
* @specnote This constructor is protected since JDK 1.4
*/
protected JarURLConnection(URL url)
throws MalformedURLException
{
super(url);
@ -153,7 +160,12 @@ public abstract class JarURLConnection extends URLConnection
return null;
}
public JarEntry getJarEntry () throws java.io.IOException
/**
* Return the JAR entry object for this connection, if any
*
* @exception IOException If an error occurs
*/
public JarEntry getJarEntry () throws IOException
{
JarFile jarfile = null;
@ -167,7 +179,7 @@ public abstract class JarURLConnection extends URLConnection
{
jarfile = getJarFile ();
}
catch (java.io.IOException x)
catch (IOException x)
{
/* ignore */
}
@ -197,7 +209,12 @@ public abstract class JarURLConnection extends URLConnection
return null;
}
public abstract JarFile getJarFile() throws java.io.IOException;
/**
* Return the JAR file for this connection
*
* @exception IOException If an error occurs
*/
public abstract JarFile getJarFile() throws IOException;
// Steal and borrow from protocol/file/Connection.java

View file

@ -38,6 +38,7 @@ exception statement from your version. */
package java.net;
import java.io.IOException;
import java.nio.channels.IllegalBlockingModeException;
import java.nio.channels.ServerSocketChannel;
/* Written using on-line Java Platform 1.2 API Specification.
@ -50,7 +51,7 @@ import java.nio.channels.ServerSocketChannel;
* listens for and accepts connections. At that point the client and
* server sockets are ready to communicate with one another utilizing
* whatever application layer protocol they desire.
* <p>
*
* As with the <code>Socket</code> class, most instance methods of this class
* simply redirect their calls to an implementation class.
*
@ -82,9 +83,13 @@ public class ServerSocket
private ServerSocketChannel ch;
/**
* Private constructor that simply sets the implementation.
* Constructor that simply sets the implementation.
*
* @exception IOException If an error occurs
*
* @specnote This constructor is public since JDK 1.4
*/
private ServerSocket()
public ServerSocket() throws IOException
{
if (factory != null)
impl = factory.createSocketImpl();
@ -100,9 +105,11 @@ public class ServerSocket
* @param port The port number to bind to
*
* @exception IOException If an error occurs
* @exception SecurityException If a security manager exists and its
* checkListen method doesn't allow the operation
*/
public ServerSocket (int port)
throws java.io.IOException
throws IOException
{
this(port, 50);
}
@ -117,9 +124,11 @@ public class ServerSocket
* @param backlog The length of the pending connection queue
*
* @exception IOException If an error occurs
* @exception SecurityException If a security manager exists and its
* checkListen method doesn't allow the operation
*/
public ServerSocket (int port, int backlog)
throws java.io.IOException
throws IOException
{
this(port, backlog, null);
}
@ -136,11 +145,13 @@ public class ServerSocket
* @param bindAddr The address to bind to, or null to bind to all addresses
*
* @exception IOException If an error occurs
* @exception SecurityException If a security manager exists and its
* checkListen method doesn't allow the operation
*
* @since 1.1
*/
public ServerSocket (int port, int backlog, InetAddress bindAddr)
throws java.io.IOException
throws IOException
{
this();
if (impl == null)
@ -164,6 +175,9 @@ public class ServerSocket
* @param endpoint The socket address to bind to
*
* @exception IOException If an error occurs
* @exception IllegalArgumentException If address type is not supported
* @exception SecurityException If a security manager exists and its
* checkListen method doesn't allow the operation
*
* @since 1.4
*/
@ -173,6 +187,9 @@ public class ServerSocket
if (impl == null)
throw new IOException ("Cannot initialize Socket implementation");
if (! (endpoint instanceof InetSocketAddress))
throw new IllegalArgumentException ("Address type not supported");
InetSocketAddress tmp = (InetSocketAddress) endpoint;
SecurityManager s = System.getSecurityManager ();
@ -187,14 +204,22 @@ public class ServerSocket
*
* @param endpoint The socket address to bind to
* @param backlog The length of the pending connection queue
*
* @exception IOException If an error occurs
* @exception IllegalArgumentException If address type is not supported
* @exception SecurityException If a security manager exists and its
* checkListen method doesn't allow the operation
*
* @since 1.4
*/
public void bind (SocketAddress endpoint, int backlog)
throws java.io.IOException
public void bind (SocketAddress endpoint, int backlog) throws IOException
{
if (impl == null)
throw new IOException ("Cannot initialize Socket implementation");
if (! (endpoint instanceof InetSocketAddress))
throw new IllegalArgumentException ("Address type not supported");
InetSocketAddress tmp = (InetSocketAddress) endpoint;
SecurityManager s = System.getSecurityManager ();
@ -253,8 +278,14 @@ public class ServerSocket
* connection is available.
*
* @exception IOException If an error occurs
* @exception SecurityException If a security manager exists and its
* checkListen method doesn't allow the operation
* @exception IllegalBlockingModeException If this socket has an associated
* channel, and the channel is in non-blocking mode
* @exception SocketTimeoutException If a timeout was previously set with
* setSoTimeout and the timeout has been reached
*/
public Socket accept () throws IOException
public Socket accept () throws IOException
{
Socket s = new Socket();
implAccept (s);
@ -270,11 +301,17 @@ public class ServerSocket
* @param socket The socket that is used for the accepted connection
*
* @exception IOException If an error occurs
* @exception IllegalBlockingModeException If this socket has an associated
* channel, and the channel is in non-blocking mode
*
* @since 1.1
*/
protected final void implAccept (Socket s) throws IOException
protected final void implAccept (Socket s)
throws IOException
{
if (ch != null && !ch.isBlocking())
throw new IllegalBlockingModeException();
impl.accept(s.impl);
}
@ -329,7 +366,7 @@ public class ServerSocket
*
* @param timeout The new SO_TIMEOUT value
*
* @exception IOException If an error occurs
* @exception SocketException If an error occurs
*
* @since 1.1
*/
@ -408,6 +445,7 @@ public class ServerSocket
* @param size The new receive buffer size.
*
* @exception SocketException If an error occurs or Socket is not connected
* @exception IllegalArgumentException If size is 0 or negative
*
* @since 1.4
*/

View file

@ -129,6 +129,8 @@ public class Socket
* @exception UnknownHostException If the hostname cannot be resolved to a
* network address.
* @exception IOException If an error occurs
* @exception SecurityException If a security manager exists and its
* checkConnect method doesn't allow the operation
*/
public Socket (String host, int port)
throws UnknownHostException, IOException
@ -144,6 +146,8 @@ public class Socket
* @param port The port number to connect to
*
* @exception IOException If an error occurs
* @exception SecurityException If a security manager exists and its
* checkConnect method doesn't allow the operation
*/
public Socket (InetAddress address, int port)
throws IOException
@ -183,6 +187,8 @@ public class Socket
* @param localPort The local port to connect to
*
* @exception IOException If an error occurs
* @exception SecurityException If a security manager exists and its
* checkConnect method doesn't allow the operation
*/
public Socket (InetAddress address, int port,
InetAddress localAddr, int localPort) throws IOException
@ -202,6 +208,8 @@ public class Socket
* for a datagram socket
*
* @exception IOException If an error occurs
* @exception SecurityException If a security manager exists and its
* checkConnect method doesn't allow the operation
*
* @deprecated Use the <code>DatagramSocket</code> class to create
* datagram oriented sockets.
@ -223,6 +231,8 @@ public class Socket
* <code>false</code> to create a datagram socket.
*
* @exception IOException If an error occurs
* @exception SecurityException If a security manager exists and its
* checkConnect method doesn't allow the operation
*
* @deprecated Use the <code>DatagramSocket</code> class to create
* datagram oriented sockets.
@ -246,6 +256,8 @@ public class Socket
* @param stream true for a stream socket, false for a datagram socket
*
* @exception IOException If an error occurs
* @exception SecurityException If a security manager exists and its
* checkConnect method doesn't allow the operation
*/
private Socket(InetAddress raddr, int rport, InetAddress laddr, int lport,
boolean stream) throws IOException
@ -275,7 +287,10 @@ public class Socket
*
* @param bindpoint The address/port to bind to
*
* @exception If an error occurs
* @exception IOException If an error occurs
* @exception SecurityException If a security manager exists and its
* checkConnect method doesn't allow the operation
* @exception IllegalArgumentException If the address type is not supported
*
* @since 1.4
*/
@ -294,12 +309,17 @@ public class Socket
* @param endpoint The address to connect to
*
* @exception IOException If an error occurs
* @exception IllegalArgumentException If the addess type is not supported
* @exception IllegalBlockingModeException FIXME
*
* @since 1.4
*/
public void connect (SocketAddress endpoint)
throws IOException
{
if (! (endpoint instanceof InetSocketAddress))
throw new IllegalArgumentException ("Address type not supported");
impl.connect (endpoint, 0);
}
@ -311,12 +331,18 @@ public class Socket
* @param endpoint The address to connect to
*
* @exception IOException If an error occurs
* @exception IllegalArgumentException If the address type is not supported
* @exception IllegalBlockingModeException FIXME
* @exception SocketTimeoutException If the timeout is reached
*
* @since 1.4
*/
public void connect (SocketAddress endpoint, int timeout)
throws IOException
{
if (! (endpoint instanceof InetSocketAddress))
throw new IllegalArgumentException ("Address type not supported");
impl.connect (endpoint, timeout);
}
@ -398,6 +424,40 @@ public class Socket
return -1;
}
/**
* If the socket is already bound this returns the local SocketAddress,
* otherwise null
*
* @since 1.4
*/
public SocketAddress getLocalSocketAddress()
{
InetAddress addr;
try
{
addr = (InetAddress) impl.getOption (SocketOptions.SO_BINDADDR);
}
catch (SocketException e)
{
return null;
}
return new InetSocketAddress (addr, impl.getLocalPort());
}
/**
* If the socket is already connected this returns the remote SocketAddress,
* otherwise null
*
* @since 1.4
*/
public SocketAddress getRemoteSocketAddress()
{
// FIXME: Implement this
return null;
}
/**
* Returns an InputStream for reading from this socket.
*
@ -479,6 +539,7 @@ public class Socket
* SO_LINGER not set.
*
* @exception SocketException If an error occurs or Socket not connected
* @exception IllegalArgumentException If linger is negative
*/
public void setSoLinger(boolean on, int linger) throws SocketException
{
@ -640,6 +701,7 @@ public class Socket
* @param size The new send buffer size.
*
* @exception SocketException If an error occurs or Socket not connected
* @exception IllegalArgumentException FIXME
*
* @since 1.2
*/
@ -686,6 +748,7 @@ public class Socket
* @param size The new receive buffer size.
*
* @exception SocketException If an error occurs or Socket is not connected
* @exception IllegalArgumentException If size is 0 or negative
*
* @since 1.2
*/
@ -847,4 +910,84 @@ public class Socket
{
return ch;
}
/**
* Checks if the SO_REUSEADDR option is enabled
*
* @exception SocketException If an error occurs
*
* @since 1.4
*/
public boolean getReuseAddress () throws SocketException
{
if (impl == null)
throw new SocketException ("Cannot initialize Socket implementation");
Object reuseaddr = impl.getOption (SocketOptions.SO_REUSEADDR);
if (!(reuseaddr instanceof Boolean))
throw new SocketException ("Internal Error");
return ((Boolean) reuseaddr).booleanValue ();
}
/**
* Enables/Disables the SO_REUSEADDR option
*
* @exception SocketException If an error occurs
*
* @since 1.4
*/
public void setReuseAddress (boolean on) throws SocketException
{
if (impl == null)
throw new SocketException ("Cannot initialize Socket implementation");
impl.setOption (SocketOptions.SO_REUSEADDR, new Boolean (on));
}
/**
* Returns the current traffic class
*
* @exception SocketException If an error occurs
*
* @see Socket:setTrafficClass
*
* @since 1.4
*/
public int getTrafficClass () throws SocketException
{
if (impl == null)
throw new SocketException ("Cannot initialize Socket implementation");
Object obj = impl.getOption(SocketOptions.IP_TOS);
if (obj instanceof Integer)
return ((Integer) obj).intValue ();
else
throw new SocketException ("Unexpected type");
}
/**
* Sets the traffic class value
*
* @param tc The traffic class
*
* @exception SocketException If an error occurs
* @exception IllegalArgumentException If tc value is illegal
*
* @see Socket:getTrafficClass
*
* @since 1.4
*/
public void setTrafficClass (int tc) throws SocketException
{
if (impl == null)
throw new SocketException ("Cannot initialize Socket implementation");
if (tc < 0 || tc > 255)
throw new IllegalArgumentException();
impl.setOption (SocketOptions.IP_TOS, new Integer (tc));
}
}

View file

@ -10,6 +10,8 @@ details. */
package java.net;
import java.io.IOException;
/**
* @author Warren Levy <warrenl@cygnus.com>
* @date March 4, 1999.
@ -24,8 +26,16 @@ package java.net;
public abstract class URLStreamHandler
{
protected abstract URLConnection openConnection(URL u)
throws java.io.IOException;
throws IOException;
/**
* Pasrses the given URL
*
* @param u The URL to parse
* @param spec The specification to use
* @param start FIXME
* @param limit FIXME
*/
protected void parseURL(URL u, String spec, int start, int limit)
{
String host = u.getHost();
@ -119,7 +129,15 @@ public abstract class URLStreamHandler
return file;
}
public boolean sameFile(URL url1, URL url2)
/**
* Compares two URLs, excluding the fragment component
*
* @param url1 The first url
* @param url2 The second url to compare with the first
*
* @specnote Now protected
*/
protected boolean sameFile(URL url1, URL url2)
{
if (url1 == url2)
return true;
@ -143,12 +161,33 @@ public abstract class URLStreamHandler
return true;
}
/**
* Sets the fields of the URL argument to the indicated values
*
* @param u The URL to modify
* @param protocol The protocol to set
* @param host The host name to et
* @param port The port number to set
* @param file The filename to set
* @param ref The reference
*
* @exception SecurityException If the protocol handler of the URL is
* different from this one
*
* @deprecated 1.2 Please use
* #setURL(URL,String,String,int,String,String,String,String);
*/
protected void setURL(URL u, String protocol, String host, int port,
String file, String ref)
{
u.set(protocol, host, port, file, ref);
}
/**
* Converts an URL of a specific protocol to a string
*
* @param u The URL to convert
*/
protected String toExternalForm(URL u)
{
String resStr, host, file, ref;