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

* java/net/Socket.java
	(implCreated): New variable that indicates created impl.
	(getImpl): New method.
	(toString): Return more SUN compliant string representation.
	(various): Use getImpl() instead of impl.

From-SVN: r73732
This commit is contained in:
Michael Koch 2003-11-19 08:34:21 +00:00 committed by Michael Koch
parent 90db942b27
commit edfe1ac771
2 changed files with 143 additions and 48 deletions

View File

@ -1,3 +1,11 @@
2003-11-19 Michael Koch <konqueror@gmx.de>
* java/net/Socket.java
(implCreated): New variable that indicates created impl.
(getImpl): New method.
(toString): Return more SUN compliant string representation.
(various): Use getImpl() instead of impl.
2003-11-19 Andreas Tobler <a.tobler@schweiz.ch>
* lib/libjava.exp: Add DYLD_LIBRARY_PATH for darwin. Look for

View File

@ -84,6 +84,8 @@ public class Socket
*/
SocketImpl impl;
private boolean implCreated = false;
private boolean inputShutdown = false;
private boolean outputShutdown = false;
@ -296,6 +298,25 @@ public class Socket
// that default. JDK 1.2 doc infers not to do a bind.
}
private SocketImpl getImpl()
throws SocketException
{
try
{
if (!implCreated)
{
impl.create(true);
implCreated = true;
}
}
catch (IOException e)
{
throw new SocketException(e.getMessage());
}
return impl;
}
/**
* Binds the socket to the givent local address/port
*
@ -323,13 +344,10 @@ public class Socket
InetSocketAddress tmp = (InetSocketAddress) bindpoint;
// create socket
impl.create (true);
// bind to address/port
try
{
impl.bind (tmp.getAddress(), tmp.getPort());
getImpl().bind (tmp.getAddress(), tmp.getPort());
}
catch (IOException exception)
{
@ -399,7 +417,7 @@ public class Socket
try
{
impl.connect (endpoint, timeout);
getImpl().connect (endpoint, timeout);
}
catch (IOException exception)
{
@ -426,7 +444,19 @@ public class Socket
*/
public InetAddress getInetAddress ()
{
return impl.getInetAddress();
if (!isConnected())
return null;
try
{
return getImpl().getInetAddress();
}
catch (SocketException e)
{
// This cannot happen as we are connected.
}
return null;
}
/**
@ -440,9 +470,10 @@ public class Socket
public InetAddress getLocalAddress ()
{
InetAddress addr = null;
try
{
addr = (InetAddress)impl.getOption(SocketOptions.SO_BINDADDR);
addr = (InetAddress) getImpl().getOption(SocketOptions.SO_BINDADDR);
}
catch(SocketException e)
{
@ -472,8 +503,18 @@ public class Socket
*/
public int getPort ()
{
if (impl != null)
return impl.getPort();
if (!isConnected())
return 0;
try
{
if (getImpl() != null)
return getImpl().getPort();
}
catch (SocketException e)
{
// This cannot happen as we are connected.
}
return -1;
}
@ -486,8 +527,18 @@ public class Socket
*/
public int getLocalPort ()
{
if (impl != null)
return impl.getLocalPort();
if (!isBound())
return -1;
try
{
if (getImpl() != null)
return getImpl().getLocalPort();
}
catch (SocketException e)
{
// This cannot happen as we are bound.
}
return -1;
}
@ -500,12 +551,20 @@ public class Socket
*/
public SocketAddress getLocalSocketAddress()
{
InetAddress addr = getLocalAddress ();
if (addr == null)
if (!isBound())
return null;
return new InetSocketAddress (addr, impl.getLocalPort());
InetAddress addr = getLocalAddress ();
try
{
return new InetSocketAddress (addr, getImpl().getLocalPort());
}
catch (SocketException e)
{
// This cannot happen as we are bound.
return null;
}
}
/**
@ -519,7 +578,15 @@ public class Socket
if (!isConnected ())
return null;
return new InetSocketAddress (impl.getInetAddress (), impl.getPort ());
try
{
return new InetSocketAddress (getImpl().getInetAddress (), getImpl().getPort ());
}
catch (SocketException e)
{
// This cannot happen as we are connected.
return null;
}
}
/**
@ -531,8 +598,8 @@ public class Socket
*/
public InputStream getInputStream () throws IOException
{
if (impl != null)
return(impl.getInputStream());
if (getImpl() != null)
return getImpl().getInputStream();
throw new IOException("Not connected");
}
@ -546,8 +613,8 @@ public class Socket
*/
public OutputStream getOutputStream () throws IOException
{
if (impl != null)
return impl.getOutputStream();
if (getImpl() != null)
return getImpl().getOutputStream();
throw new IOException("Not connected");
}
@ -563,7 +630,7 @@ public class Socket
*/
public void setTcpNoDelay (boolean on) throws SocketException
{
impl.setOption(SocketOptions.TCP_NODELAY, new Boolean(on));
getImpl().setOption(SocketOptions.TCP_NODELAY, new Boolean(on));
}
/**
@ -580,7 +647,7 @@ public class Socket
*/
public boolean getTcpNoDelay() throws SocketException
{
Object on = impl.getOption(SocketOptions.TCP_NODELAY);
Object on = getImpl().getOption(SocketOptions.TCP_NODELAY);
if (on instanceof Boolean)
return(((Boolean)on).booleanValue());
@ -615,11 +682,11 @@ public class Socket
if (linger > 65535)
linger = 65535;
impl.setOption(SocketOptions.SO_LINGER, new Integer(linger));
getImpl().setOption(SocketOptions.SO_LINGER, new Integer(linger));
}
else
{
impl.setOption(SocketOptions.SO_LINGER, new Boolean(false));
getImpl().setOption(SocketOptions.SO_LINGER, new Boolean(false));
}
}
@ -641,7 +708,8 @@ public class Socket
*/
public int getSoLinger() throws SocketException
{
Object linger = impl.getOption(SocketOptions.SO_LINGER);
Object linger = getImpl().getOption(SocketOptions.SO_LINGER);
if (linger instanceof Integer)
return(((Integer)linger).intValue());
else
@ -660,7 +728,7 @@ public class Socket
*/
public void sendUrgentData (int data) throws IOException
{
impl.sendUrgentData (data);
getImpl().sendUrgentData (data);
}
/**
@ -674,7 +742,7 @@ public class Socket
*/
public void setOOBInline (boolean on) throws SocketException
{
impl.setOption(SocketOptions.SO_OOBINLINE, new Boolean(on));
getImpl().setOption(SocketOptions.SO_OOBINLINE, new Boolean(on));
}
/**
@ -686,7 +754,7 @@ public class Socket
*/
public boolean getOOBInline () throws SocketException
{
Object buf = impl.getOption(SocketOptions.SO_OOBINLINE);
Object buf = getImpl().getOption(SocketOptions.SO_OOBINLINE);
if (buf instanceof Boolean)
return(((Boolean)buf).booleanValue());
@ -716,7 +784,7 @@ public class Socket
if (timeout < 0)
throw new IllegalArgumentException("SO_TIMEOUT value must be >= 0");
impl.setOption(SocketOptions.SO_TIMEOUT, new Integer(timeout));
getImpl().setOption(SocketOptions.SO_TIMEOUT, new Integer(timeout));
}
/**
@ -738,7 +806,7 @@ public class Socket
*/
public synchronized int getSoTimeout () throws SocketException
{
Object timeout = impl.getOption(SocketOptions.SO_TIMEOUT);
Object timeout = getImpl().getOption(SocketOptions.SO_TIMEOUT);
if (timeout instanceof Integer)
return(((Integer)timeout).intValue());
else
@ -762,7 +830,7 @@ public class Socket
if (size <= 0)
throw new IllegalArgumentException("SO_SNDBUF value must be > 0");
impl.setOption(SocketOptions.SO_SNDBUF, new Integer(size));
getImpl().setOption(SocketOptions.SO_SNDBUF, new Integer(size));
}
/**
@ -778,7 +846,7 @@ public class Socket
*/
public int getSendBufferSize () throws SocketException
{
Object buf = impl.getOption(SocketOptions.SO_SNDBUF);
Object buf = getImpl().getOption(SocketOptions.SO_SNDBUF);
if (buf instanceof Integer)
return(((Integer)buf).intValue());
@ -803,7 +871,7 @@ public class Socket
if (size <= 0)
throw new IllegalArgumentException("SO_RCVBUF value must be > 0");
impl.setOption(SocketOptions.SO_RCVBUF, new Integer(size));
getImpl().setOption(SocketOptions.SO_RCVBUF, new Integer(size));
}
/**
@ -819,7 +887,7 @@ public class Socket
*/
public int getReceiveBufferSize () throws SocketException
{
Object buf = impl.getOption(SocketOptions.SO_RCVBUF);
Object buf = getImpl().getOption(SocketOptions.SO_RCVBUF);
if (buf instanceof Integer)
return(((Integer)buf).intValue());
@ -839,7 +907,7 @@ public class Socket
*/
public void setKeepAlive (boolean on) throws SocketException
{
impl.setOption(SocketOptions.SO_KEEPALIVE, new Boolean(on));
getImpl().setOption(SocketOptions.SO_KEEPALIVE, new Boolean(on));
}
/**
@ -854,7 +922,7 @@ public class Socket
*/
public boolean getKeepAlive () throws SocketException
{
Object buf = impl.getOption(SocketOptions.SO_KEEPALIVE);
Object buf = getImpl().getOption(SocketOptions.SO_KEEPALIVE);
if (buf instanceof Boolean)
return(((Boolean)buf).booleanValue());
@ -869,8 +937,8 @@ public class Socket
*/
public synchronized void close () throws IOException
{
if (impl != null)
impl.close();
if (getImpl() != null)
getImpl().close();
if (getChannel() != null)
getChannel().close();
@ -885,7 +953,19 @@ public class Socket
*/
public String toString ()
{
return("Socket " + impl);
try
{
if (isConnected())
return ("Socket[addr=" + getImpl().getInetAddress()
+ ",port=" + getImpl().getPort()
+ ",localport=" + getImpl().getLocalPort());
}
catch (SocketException e)
{
// This cannot happen as we are connected.
}
return "Socket[unconnected]";
}
// Class Methods
@ -930,8 +1010,8 @@ public class Socket
*/
public void shutdownInput() throws IOException
{
if (impl != null)
impl.shutdownInput();
if (getImpl() != null)
getImpl().shutdownInput();
inputShutdown = true;
}
@ -945,8 +1025,8 @@ public class Socket
*/
public void shutdownOutput() throws IOException
{
if (impl != null)
impl.shutdownOutput();
if (getImpl() != null)
getImpl().shutdownOutput();
outputShutdown = true;
}
@ -972,7 +1052,7 @@ public class Socket
*/
public boolean getReuseAddress () throws SocketException
{
Object reuseaddr = impl.getOption (SocketOptions.SO_REUSEADDR);
Object reuseaddr = getImpl().getOption (SocketOptions.SO_REUSEADDR);
if (!(reuseaddr instanceof Boolean))
throw new SocketException ("Internal Error");
@ -989,7 +1069,7 @@ public class Socket
*/
public void setReuseAddress (boolean on) throws SocketException
{
impl.setOption (SocketOptions.SO_REUSEADDR, new Boolean (on));
getImpl().setOption (SocketOptions.SO_REUSEADDR, new Boolean (on));
}
/**
@ -1003,7 +1083,7 @@ public class Socket
*/
public int getTrafficClass () throws SocketException
{
Object obj = impl.getOption(SocketOptions.IP_TOS);
Object obj = getImpl().getOption(SocketOptions.IP_TOS);
if (obj instanceof Integer)
return ((Integer) obj).intValue ();
@ -1028,7 +1108,7 @@ public class Socket
if (tc < 0 || tc > 255)
throw new IllegalArgumentException();
impl.setOption (SocketOptions.IP_TOS, new Integer (tc));
getImpl().setOption (SocketOptions.IP_TOS, new Integer (tc));
}
/**
@ -1038,7 +1118,14 @@ public class Socket
*/
public boolean isConnected ()
{
return impl.getInetAddress () != null;
try
{
return getImpl().getInetAddress () != null;
}
catch (SocketException e)
{
return false;
}
}
/**