7096436: (sc) SocketChannel.connect fails on Windows 8 when channel configured non-blocking

Set localAddress only when connection is established

Reviewed-by: alanb
This commit is contained in:
Kurchi Subhra Hazra 2012-05-09 16:55:55 -07:00
parent 34aa937e99
commit 2c13671808

View File

@ -629,17 +629,6 @@ class SocketChannelImpl
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 @@ class SocketChannelImpl
// 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 @@ class SocketChannelImpl
if (n > 0) {
synchronized (stateLock) {
state = ST_CONNECTED;
if (isOpen())
localAddress = Net.localAddress(fd);
}
return true;
}