Hi, I committed the previously discussed patch (minus the SocketChannelImpl import that I accidentally removed).
Regards, Jeroen 2006-09-19 Jeroen Frijters <[EMAIL PROTECTED]> * gnu/java/nio/SocketChannelImpl.java: Removed unused import. * java/net/ServerSocket.java (port): New field. (bind): Set port field. (close): Set impl to null. (isClosed): Check impl and channel instead of using VMChannel. (toString): Use port field and getLocalPort() method. * java/net/Socket.java (isClosed): Check impl and channel instead of using VMChannel.
Index: java/net/ServerSocket.java =================================================================== RCS file: /cvsroot/classpath/classpath/java/net/ServerSocket.java,v retrieving revision 1.46 diff -u -r1.46 ServerSocket.java --- java/net/ServerSocket.java 17 Sep 2006 07:31:42 -0000 1.46 +++ java/net/ServerSocket.java 18 Sep 2006 06:38:45 -0000 @@ -39,7 +39,6 @@ package java.net; import gnu.java.net.PlainSocketImpl; -import gnu.java.nio.VMChannel; import java.io.IOException; import java.nio.channels.IllegalBlockingModeException; @@ -80,6 +79,7 @@ * We need to retain the local address even after the socket is closed. */ private InetSocketAddress local; + private int port; /* * This constructor is only used by java.nio. @@ -238,7 +238,8 @@ try { - impl.bind(addr, tmp.getPort()); + port = tmp.getPort(); + impl.bind(addr, port); impl.listen(backlog); local = new InetSocketAddress( (InetAddress) impl.getOption(SocketOptions.SO_BINDADDR), @@ -379,10 +380,11 @@ */ public void close() throws IOException { - if (isClosed()) - return; - - impl.close(); + if (impl != null) + { + impl.close(); + impl = null; + } } /** @@ -422,10 +424,8 @@ */ public boolean isClosed() { - VMChannel vmchannel = ((PlainSocketImpl) impl).getVMChannel(); - if (vmchannel == null) // Not created yet. - return false; - return vmchannel.getState().isClosed(); + ServerSocketChannel channel = getChannel(); + return impl == null || (channel != null && ! channel.isOpen()); } /** @@ -573,7 +573,7 @@ return "ServerSocket[unbound]"; return ("ServerSocket[addr=" + getInetAddress() + ",port=" - + impl.getPort() + ",localport=" + impl.getLocalPort() + "]"); + + port + ",localport=" + getLocalPort() + "]"); } /** Index: java/net/Socket.java =================================================================== RCS file: /cvsroot/classpath/classpath/java/net/Socket.java,v retrieving revision 1.57 diff -u -r1.57 Socket.java --- java/net/Socket.java 17 Sep 2006 07:31:42 -0000 1.57 +++ java/net/Socket.java 18 Sep 2006 06:37:18 -0000 @@ -39,7 +39,6 @@ package java.net; import gnu.java.net.PlainSocketImpl; -import gnu.java.nio.VMChannel; import java.io.IOException; import java.io.InputStream; @@ -1223,17 +1222,8 @@ */ public boolean isClosed() { - if (impl == null) - return true; - if (impl instanceof PlainSocketImpl) - { - VMChannel vmchannel = ((PlainSocketImpl) impl).getVMChannel(); - if (vmchannel == null) - return false; // Not created yet. - VMChannel.State state = vmchannel.getState(); - return state.isClosed(); - } - return false; + SocketChannel channel = getChannel(); + return impl == null || (channel != null && ! channel.isOpen()); } /**