Mercurial > hg > icedtea9-forest > jdk
changeset 5572:5152c832745a
7096436: (sc) SocketChannel.connect fails on Windows 8 when channel configured non-blocking
Summary: Set localAddress only when connection is established
Reviewed-by: alanb
author | khazra |
---|---|
date | Wed, 09 May 2012 16:55:55 -0700 |
parents | 6438f1277df6 |
children | fdf5e15293e6 |
files | src/share/classes/sun/nio/ch/SocketChannelImpl.java |
diffstat | 1 files changed, 4 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/classes/sun/nio/ch/SocketChannelImpl.java Wed May 09 16:33:30 2012 -0700 +++ b/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; }