7084032: test/java/net/Inet6Address/B6558853.java fails on Windows XP/2003 if IPv6
authorchegar
Sat, 03 Sep 2011 07:46:35 +0100
changeset 10426 90d1b830cdd6
parent 10425 7903cf45f96f
child 10427 c255e1803e4d
7084032: test/java/net/Inet6Address/B6558853.java fails on Windows XP/2003 if IPv6 Reviewed-by: chegar Contributed-by: kurchi.subhra.hazra@oracle.com
jdk/src/windows/native/java/net/TwoStacksPlainSocketImpl.c
--- a/jdk/src/windows/native/java/net/TwoStacksPlainSocketImpl.c	Fri Sep 02 16:06:08 2011 -0700
+++ b/jdk/src/windows/native/java/net/TwoStacksPlainSocketImpl.c	Sat Sep 03 07:46:35 2011 +0100
@@ -576,6 +576,7 @@
 {
     /* fields on this */
     jint port;
+    jint scope;
     jint timeout = (*env)->GetIntField(env, this, psi_timeoutID);
     jobject fdObj = (*env)->GetObjectField(env, this, psi_fdID);
     jobject fd1Obj = (*env)->GetObjectField(env, this, psi_fd1ID);
@@ -755,7 +756,11 @@
         addr = (*env)->GetObjectField (env, socketAddressObj, ia6_ipaddressID);
         (*env)->SetByteArrayRegion (env, addr, 0, 16, (const char *)&him.him6.sin6_addr);
         (*env)->SetIntField(env, socketAddressObj, ia_familyID, IPv6);
-        (*env)->SetIntField(env, socketAddressObj, ia6_scopeidID, him.him6.sin6_scope_id);
+        scope = him.him6.sin6_scope_id;
+        (*env)->SetIntField(env, socketAddressObj, ia6_scopeidID, scope);
+        if(scope>0) {
+            (*env)->SetBooleanField(env, socketAddressObj, ia6_scopeidsetID, JNI_TRUE);
+        }
     }
     /* fields common to AF_INET and AF_INET6 */