diff options
Diffstat (limited to 'libjava/gnu/java')
-rw-r--r-- | libjava/gnu/java/net/natPlainSocketImplPosix.cc | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/libjava/gnu/java/net/natPlainSocketImplPosix.cc b/libjava/gnu/java/net/natPlainSocketImplPosix.cc index 643f4e4..be9437c 100644 --- a/libjava/gnu/java/net/natPlainSocketImplPosix.cc +++ b/libjava/gnu/java/net/natPlainSocketImplPosix.cc @@ -142,6 +142,15 @@ gnu::java::net::PlainSocketImpl::connect (::java::net::SocketAddress *addr, ::java::net::InetAddress *host = tmp->getAddress(); jint rport = tmp->getPort(); + // Set the SocketImpl's address and port fields before we try to + // connect. Note that the fact that these are set doesn't imply + // that we're actually connected to anything. We need to record + // this data before we attempt the connect, since non-blocking + // SocketChannels will use this and almost certainly throw timeout + // exceptions. + address = host; + port = rport; + union SockAddr u; socklen_t addrlen = sizeof(u); jbyteArray haddress = host->addr; @@ -197,9 +206,6 @@ gnu::java::net::PlainSocketImpl::connect (::java::net::SocketAddress *addr, goto error; } - address = host; - port = rport; - // A bind may not have been done on this socket; if so, set localport now. if (localport == 0) { |