# HG changeset patch # User khazra # Date 1336607755 25200 # Node ID 5c743840dd8a62b9b16b3aafaaaa3b753755dc70 # Parent 4156af43d0bfe3edd525cdad4600a4ae1f8ed0a8 7096436: (sc) SocketChannel.connect fails on Windows 8 when channel configured non-blocking Summary: Set localAddress only when connection is established Reviewed-by: alanb diff -r 4156af43d0bf -r 5c743840dd8a jdk/src/share/classes/sun/nio/ch/SocketChannelImpl.java --- a/jdk/src/share/classes/sun/nio/ch/SocketChannelImpl.java Wed May 09 16:33:30 2012 -0700 +++ b/jdk/src/share/classes/sun/nio/ch/SocketChannelImpl.java Wed May 09 16:55:55 2012 -0700 @@ -629,17 +629,6 @@ break; } - synchronized (stateLock) { - if (isOpen() && (localAddress == null) || - ((InetSocketAddress)localAddress) - .getAddress().isAnyLocalAddress()) - { - // Socket was not bound before connecting or - // Socket was bound with an "anyLocalAddress" - localAddress = Net.localAddress(fd); - } - } - } finally { readerCleanup(); end((n > 0) || (n == IOStatus.UNAVAILABLE)); @@ -659,6 +648,8 @@ // Connection succeeded; disallow further // invocation state = ST_CONNECTED; + if (isOpen()) + localAddress = Net.localAddress(fd); return true; } // If nonblocking and no exception then connection @@ -747,6 +738,8 @@ if (n > 0) { synchronized (stateLock) { state = ST_CONNECTED; + if (isOpen()) + localAddress = Net.localAddress(fd); } return true; }