From 44fae9caaeb326cdb6b034b15fbb1c9412317275 Mon Sep 17 00:00:00 2001
From: Anthony Green <green@redhat.com>
Date: Wed, 28 Dec 2005 18:29:10 +0000
Subject: [PATCH] natPlainSocketImplPosix.cc (connect): Record address and port
 before attempting anything.

2005-12-28  Anthony Green  <green@redhat.com>

	* gnu/java/net/natPlainSocketImplPosix.cc (connect): Record
	address and port before attempting anything.

From-SVN: r109116
---
 libjava/ChangeLog                               |  5 +++++
 libjava/gnu/java/net/natPlainSocketImplPosix.cc | 12 +++++++++---
 2 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index cff2e26f6fa1..7eea0f844a52 100644
--- a/libjava/ChangeLog
+++ b/libjava/ChangeLog
@@ -1,3 +1,8 @@
+2005-12-28  Anthony Green  <green@redhat.com>
+
+	* gnu/java/net/natPlainSocketImplPosix.cc (connect): Record
+	address and port before attempting anything.
+
 2005-12-28  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
 
 	* sysdep/pa/locks.h (compare_and_swap): Add ldcw semaphore to make
diff --git a/libjava/gnu/java/net/natPlainSocketImplPosix.cc b/libjava/gnu/java/net/natPlainSocketImplPosix.cc
index 643f4e4909a5..be9437cd7dba 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)
     {
-- 
GitLab