Hi,

 test/java/net/Inet6Address/B6558853.java tests if the address obtained from 
getHostAddress() on connections
 using IPv6 link-local addresses contains the zone id. For 
Inet6Address.getHostAddress() to return the zone id,
 Inet6Address.scope_id_set needs to be set to true in addition to setting the 
appropriate Inet6Address.scope_id.
 In case of Windows XP/2003 with IPv6 enabled, the native socket implementation 
of socketAccept() method in
 src/windows/native/java/net/TwoStacksPlainSocketImpl.c does not set the 
scope_id_set to true which causes
 the zone id not to be returned, and B6558853 throws a RuntimeException.

The fix is to simply set the scopeidsetID in socketAccept() method to true if 
the scope_id is greater than 0.



Submitting hg diff:

diff --git a/src/windows/native/java/net/TwoStacksPlainSocketImpl.c 
b/src/windows/native/java/net/TwoStacksPlainSocketImpl.c
--- a/src/windows/native/java/net/TwoStacksPlainSocketImpl.c
+++ b/src/windows/native/java/net/TwoStacksPlainSocketImpl.c
@@ -576,6 +576,7 @@ Java_java_net_TwoStacksPlainSocketImpl_s
 {
     /* 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 @@ Java_java_net_TwoStacksPlainSocketImpl_s
         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 */


Thanks,

--
-Kurchi




Reply via email to