7096436: (sc) SocketChannel.connect fails on Windows 8 when channel configured non-blocking
Summary: Set localAddress only when connection is established
Reviewed-by: alanb
--- 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;
}