--- a/jdk/src/solaris/native/java/net/PlainSocketImpl.c Tue Mar 06 10:25:45 2012 +0800
+++ b/jdk/src/solaris/native/java/net/PlainSocketImpl.c Tue Mar 06 20:34:38 2012 +0000
@@ -70,6 +70,8 @@
jfieldID psi_fdLockID;
jfieldID psi_closePendingID;
+extern void setDefaultScopeID(JNIEnv *env, struct sockaddr *him);
+
/*
* file descriptor used for dup2
*/
@@ -115,7 +117,6 @@
return sv[0];
}
-
/*
* Return the file descriptor given a PlainSocketImpl
*/
@@ -260,6 +261,9 @@
/* fdObj is the FileDescriptor field on this */
jobject fdObj = (*env)->GetObjectField(env, this, psi_fdID);
+
+ jclass clazz = (*env)->GetObjectClass(env, this);
+
jobject fdLock;
jint trafficClass = (*env)->GetIntField(env, this, psi_trafficClassID);
@@ -286,6 +290,7 @@
if (NET_InetAddressToSockaddr(env, iaObj, port, (struct sockaddr *)&him, &len, JNI_TRUE) != 0) {
return;
}
+ setDefaultScopeID(env, (struct sockaddr *)&him);
#ifdef AF_INET6
if (trafficClass != 0 && ipv6_available()) {
@@ -483,9 +488,11 @@
if (connect_rv == JVM_IO_INTR) {
JNU_ThrowByName(env, JNU_JAVAIOPKG "InterruptedIOException",
"operation interrupted");
+#if defined(EPROTO)
} else if (errno == EPROTO) {
NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "ProtocolException",
"Protocol error");
+#endif
} else if (errno == ECONNREFUSED) {
NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "ConnectException",
"Connection refused");
@@ -565,6 +572,7 @@
if (NET_InetAddressToSockaddr(env, iaObj, localport, (struct sockaddr *)&him, &len, JNI_TRUE) != 0) {
return;
}
+ setDefaultScopeID(env, (struct sockaddr *)&him);
if (NET_Bind(fd, (struct sockaddr *)&him, len) < 0) {
if (errno == EADDRINUSE || errno == EADDRNOTAVAIL ||