[kaffe] java.net.Socket#getLocalAddress() should return anylocal if not bound
Ito Kazumitsu
ito.kazumitsu at mail.hidec.co.jp
Tue Sep 14 00:34:13 PDT 2004
Hi,
While running Jetty 4.2.20 with kaffe
(ChangeLog head : 2004-09-06 Dalibor Topic), I found a
case where an unexpected NullPointerException is thrown.
And I have found a possible bug in java.net.Socket.
Sun's API document says about java.net.Socket#getLocalAddress():
Returns:
the local address to which the socket is bound or
InetAddress.anyLocalAddress() if the socket is not bound yet.
I am afraid InetAddress.anyLocalAddress() is not defined anywhere,
but I suppose it means anylocal or wildcard address.
So I fixed java/net/Socket.java and found Jetty worked without problem.
--- libraries/javalib/java/net/Socket.java.orig Tue Jul 27 06:13:57 2004
+++ libraries/javalib/java/net/Socket.java Tue Sep 14 16:04:32 2004
@@ -479,7 +479,8 @@
/**
* Returns the local address to which this socket is bound. If this socket
- * is not connected, then <code>null</code> is returned.
+ * is not connected, then <code>InetAddress.anyLocalAddress()</code> is
+ * returned.
*
* @return The local address
*
@@ -487,22 +488,26 @@
*/
public InetAddress getLocalAddress()
{
- if (! isBound())
- return null;
-
InetAddress addr = null;
- try
+ if (! isBound())
{
- addr = (InetAddress) getImpl().getOption(SocketOptions.SO_BINDADDR);
+ addr = InetAddress.ANY_IF;
}
- catch (SocketException e)
+ else
{
- // (hopefully) shouldn't happen
- // throw new java.lang.InternalError
- // ("Error in PlainSocketImpl.getOption");
- return null;
- }
+ try
+ {
+ addr = (InetAddress) getImpl().getOption(SocketOptions.SO_BINDADDR);
+ }
+ catch (SocketException e)
+ {
+ // (hopefully) shouldn't happen
+ // throw new java.lang.InternalError
+ // ("Error in PlainSocketImpl.getOption");
+ return null;
+ }
+ }
// FIXME: According to libgcj, checkConnect() is supposed to be called
// before performing this operation. Problems: 1) We don't have the
More information about the kaffe
mailing list