2003-11-25 Michael Koch <konqueror@gmx.de>

* java/net/DatagramSocket.java
	(factory): Made private.
	(closed): Removed.
	(DatagramSocket): Check impl argument, use constructor with
	SocketAddress argument.
	(close): Set impl to null, use isClosed().
	(isClosed): Check for impl == null.
	(getLocalAddress): Use isClosed().
	(getLocalPort): Check if socket is closed.
	(getSoTimeout): Likewise.
	(setSoTimeout): Likewise.
	(getSendBufferSize): Likewise.
	(setSendBufferSize): Likewise.
	(getReceiveBufferSize): Likewise.
	(setReceiveBufferSize): Likewise.
	(receive): Likewise.
	(send): Likewise.
	(bind): Likewise.
	(connect): Likewise.
	(setReuseAddress): Likewise.
	(getReuseAddress): Likewise.
	(setBroadcast): Likewise.
	(getBroadcast): Likewise.
	(setTrafficClass): Likewise.
	(getTrafficClass): Likewise.
	* java/net/MulticastSocket.java
	(getInterface): Check if socket is closed.
	(getTTL): Likewise.
	(getTimeToLive): Likewise.
	(setInterface): Likewise.
	(setNetworkInterface): Likewise.
	(getNetworkInterface): Likewise.
	(setLoopbackMode): Likewise.
	(setTTL): Likewise.
	(setTimeToLive): Likewise.
	(joinGroup): Likewise.
	(leaveGroup): Likewise.
	(send): Likewise.
	* java/net/ServerSocket.java
	(closed): Removed.
	(close): Check if socket is closed, set impl to null.
	(isClosed): Check impl == null;
	(ServerSocket): Check impl argument.
	(getInetAddress): Check if socket is bound.
	(getLocalPort): Likewise.
	(getLocalSocketAddress): Likewise.
	(bind): Check if socket is closed.
	(implAccept): Likewise.
	(setSoTimeout): Likewise.
	(getSoTimeout): Likewise.
	(setReuseAddress): Likewise.
	(getReuseAddress): Likewise.
	(setReceiveBufferSize): Likewise.
	(getReceiveBufferSize): Likewise.
	(toString): Make output compliant to JDK 1.4.2.
	* java/net/Socket.java
	(closed): Removed.
	(Socket): Fixed documentation.
	(connect): Check if socket is closed, changed exception text,
	fixed documentation.
	(getInputStream): Check of socket is closed  and connected.
	(getOutputStream): Likewise.
	(bind): Check if socket is closed.
	(setTcpNoDelay): Likewise.
	(getTcpNoDelay): Likewise.
	(setSoLinger): Likewise.
	(getSoLinger): Likewise.
	(sendUrgentData): Likewise.
	(setOOBInline): Likewise.
	(getOOBInline): Likewise.
	(setSoTimeout): Likewise.
	(getSoTimeout): Likewise.
	(setSendBufferSize): Likewise.
	(getSendBufferSize): Likewise.
	(setReceiveBufferSize): Likewise.
	(getReceiveBufferSize): Likewise.
	(setKeepAlive): Likewise.
	(getKeepAlive): Likewise.
	(close): Likewise.
	(shutdownInput): Likewise.
	(shutdownOutput): Likewise.
	(getReuseAddress): Likewise.
	(getTrafficClass): Likewise.
	(setTrafficClass): Likewise.
	(isClosed): Check impl == null.
	(toString): Added missing ']'.

From-SVN: r73918
This commit is contained in:
Michael Koch 2003-11-25 10:09:48 +00:00 committed by Michael Koch
parent dcb5fe8b43
commit 66e5d61fba
5 changed files with 354 additions and 107 deletions

View file

@ -73,8 +73,6 @@ public class ServerSocket
*/
private SocketImpl impl;
private boolean closed = false;
/*
* This constructor is only used by java.nio.
*/
@ -82,6 +80,9 @@ public class ServerSocket
//ServerSocket (PlainSocketImpl impl) throws IOException
ServerSocket (SocketImpl impl) throws IOException
{
if (impl == null)
throw new NullPointerException("impl may not be null");
this.impl = impl;
this.impl.create (true);
}
@ -208,8 +209,8 @@ public class ServerSocket
*/
public void bind (SocketAddress endpoint, int backlog) throws IOException
{
if (closed)
throw new SocketException ("ServerSocket is closed");
if (isClosed())
throw new SocketException("ServerSocket is closed");
if (! (endpoint instanceof InetSocketAddress))
throw new IllegalArgumentException ("Address type not supported");
@ -249,12 +250,16 @@ public class ServerSocket
*/
public InetAddress getInetAddress()
{
if (!isBound())
return null;
try
{
return (InetAddress) impl.getOption (SocketOptions.SO_BINDADDR);
}
catch (SocketException e)
{
// This never happens as we are bound.
return null;
}
}
@ -266,6 +271,9 @@ public class ServerSocket
*/
public int getLocalPort()
{
if (!isBound())
return -1;
return impl.getLocalPort();
}
@ -276,12 +284,10 @@ public class ServerSocket
*/
public SocketAddress getLocalSocketAddress()
{
InetAddress addr = getInetAddress();
if (addr != null)
return new InetSocketAddress (getInetAddress(), getLocalPort());
return null;
if (!isBound())
return null;
return new InetSocketAddress(getInetAddress(), getLocalPort());
}
/**
@ -303,10 +309,9 @@ public class ServerSocket
if (sm != null)
sm.checkListen (impl.getLocalPort ());
Socket s = new Socket();
implAccept (s);
return s;
Socket socket = new Socket();
implAccept (socket);
return socket;
}
/**
@ -322,14 +327,17 @@ public class ServerSocket
*
* @since 1.1
*/
protected final void implAccept (Socket s)
protected final void implAccept (Socket socket)
throws IOException
{
if (isClosed())
throw new SocketException("ServerSocket is closed");
if (getChannel() != null
&& !getChannel().isBlocking())
throw new IllegalBlockingModeException();
impl.accept(s.impl);
impl.accept(socket.getImpl());
}
/**
@ -339,12 +347,15 @@ public class ServerSocket
*/
public void close () throws IOException
{
impl.close ();
if (!isClosed())
{
impl.close();
if (getChannel() != null)
getChannel().close ();
if (getChannel() != null)
getChannel().close();
closed = true;
impl = null;
}
}
/**
@ -387,7 +398,7 @@ public class ServerSocket
*/
public boolean isClosed()
{
return closed;
return impl == null;
}
/**
@ -404,6 +415,9 @@ public class ServerSocket
*/
public void setSoTimeout (int timeout) throws SocketException
{
if (isClosed())
throw new SocketException("ServerSocket is closed");
if (timeout < 0)
throw new IllegalArgumentException("SO_TIMEOUT value must be >= 0");
@ -424,6 +438,9 @@ public class ServerSocket
*/
public int getSoTimeout () throws IOException
{
if (isClosed())
throw new SocketException("ServerSocket is closed");
Object timeout = impl.getOption(SocketOptions.SO_TIMEOUT);
if (!(timeout instanceof Integer))
@ -442,6 +459,9 @@ public class ServerSocket
public void setReuseAddress (boolean on)
throws SocketException
{
if (isClosed())
throw new SocketException("ServerSocket is closed");
impl.setOption (SocketOptions.SO_REUSEADDR, new Boolean (on));
}
@ -455,6 +475,9 @@ public class ServerSocket
public boolean getReuseAddress()
throws SocketException
{
if (isClosed())
throw new SocketException("ServerSocket is closed");
Object reuseaddr = impl.getOption (SocketOptions.SO_REUSEADDR);
if (!(reuseaddr instanceof Boolean))
@ -478,6 +501,9 @@ public class ServerSocket
public void setReceiveBufferSize (int size)
throws SocketException
{
if (isClosed())
throw new SocketException("ServerSocket is closed");
if (size <= 0)
throw new IllegalArgumentException ("SO_RCVBUF value must be > 0");
@ -498,6 +524,9 @@ public class ServerSocket
public int getReceiveBufferSize ()
throws SocketException
{
if (isClosed())
throw new SocketException("ServerSocket is closed");
Object buf = impl.getOption (SocketOptions.SO_RCVBUF);
if (!(buf instanceof Integer))
@ -513,11 +542,15 @@ public class ServerSocket
*/
public String toString ()
{
return "ServerSocket" + impl.toString();
if (!isBound())
return "ServerSocket[unbound]";
return ("ServerSocket[addr=" + impl.getInetAddress()
+ ",port=" + impl.getPort()
+ ",localport=" + impl.getLocalPort()
+ "]");
}
// Class methods
/**
* Sets the <code>SocketImplFactory</code> for all
* <code>ServerSocket</code>'s. This may only be done