--- a/jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c Tue Jan 26 11:39:29 2010 +0100
+++ b/jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c Wed Jan 27 16:11:53 2010 +0000
@@ -605,8 +605,12 @@
}
iaObj = NET_SockaddrToInetAddress(env, (struct sockaddr *)&remote_addr, &port);
+#ifdef AF_INET6
family = (*env)->GetIntField(env, iaObj, ia_familyID) == IPv4?
AF_INET : AF_INET6;
+#else
+ family = AF_INET;
+#endif
if (family == AF_INET) { /* this api can't handle IPV6 addresses */
int address = (*env)->GetIntField(env, iaObj, ia_addressID);
(*env)->SetIntField(env, addressObj, ia_addressID, address);
@@ -812,9 +816,9 @@
jboolean retry;
#ifdef __linux__
jboolean connected = JNI_FALSE;
- jobject connectedAddress;
- jint connectedPort;
- jlong prevTime;
+ jobject connectedAddress = NULL;
+ jint connectedPort = 0;
+ jlong prevTime = 0;
#endif
if (IS_NULL(fdObj)) {
@@ -1186,6 +1190,7 @@
* Set outgoing multicast interface designated by a NetworkInterface.
* Throw exception if failed.
*/
+#ifdef AF_INET6
static void mcast_set_if_by_if_v6(JNIEnv *env, jobject this, int fd, jobject value) {
static jfieldID ni_indexID;
int index;
@@ -1222,6 +1227,7 @@
}
#endif
}
+#endif /* AF_INET6 */
/*
* Set outgoing multicast interface designated by an InetAddress.
@@ -1251,6 +1257,7 @@
* Set outgoing multicast interface designated by an InetAddress.
* Throw exception if failed.
*/
+#ifdef AF_INET6
static void mcast_set_if_by_addr_v6(JNIEnv *env, jobject this, int fd, jobject value) {
static jclass ni_class;
if (ni_class == NULL) {
@@ -1272,6 +1279,7 @@
mcast_set_if_by_if_v6(env, this, fd, value);
}
+#endif
/*
* Sets the multicast interface.
@@ -1307,6 +1315,7 @@
/*
* value is an InetAddress.
*/
+#ifdef AF_INET6
#ifdef __solaris__
if (ipv6_available()) {
mcast_set_if_by_addr_v6(env, this, fd, value);
@@ -1320,12 +1329,16 @@
mcast_set_if_by_addr_v6(env, this, fd, value);
}
#endif
+#else
+ mcast_set_if_by_addr_v4(env, this, fd, value);
+#endif /* AF_INET6 */
}
if (opt == java_net_SocketOptions_IP_MULTICAST_IF2) {
/*
* value is a NetworkInterface.
*/
+#ifdef AF_INET6
#ifdef __solaris__
if (ipv6_available()) {
mcast_set_if_by_if_v6(env, this, fd, value);
@@ -1339,6 +1352,9 @@
mcast_set_if_by_if_v6(env, this, fd, value);
}
#endif
+#else
+ mcast_set_if_by_if_v4(env, this, fd, value);
+#endif /* AF_INET6 */
}
}
@@ -1368,6 +1384,7 @@
/*
* Enable/disable local loopback of multicast datagrams.
*/
+#ifdef AF_INET6
static void mcast_set_loop_v6(JNIEnv *env, jobject this, int fd, jobject value) {
jclass cls;
jfieldID fid;
@@ -1397,12 +1414,14 @@
}
#endif
}
+#endif /* AF_INET6 */
/*
* Sets the multicast loopback mode.
*/
static void setMulticastLoopbackMode(JNIEnv *env, jobject this, int fd,
jint opt, jobject value) {
+#ifdef AF_INET6
#ifdef __solaris__
if (ipv6_available()) {
mcast_set_loop_v6(env, this, fd, value);
@@ -1416,6 +1435,9 @@
mcast_set_loop_v6(env, this, fd, value);
}
#endif
+#else
+ mcast_set_loop_v4(env, this, fd, value);
+#endif /* AF_INET6 */
}
/*
@@ -1838,7 +1860,7 @@
if (opt == java_net_SocketOptions_SO_BINDADDR) {
/* find out local IP address */
SOCKADDR him;
- int len = 0;
+ socklen_t len = 0;
int port;
jobject iaObj;
@@ -1941,6 +1963,7 @@
/*
* Set hops limit for a socket. Throw exception if failed.
*/
+#ifdef AF_INET6
static void setHopLimit(JNIEnv *env, int fd, jint ttl) {
int ittl = (int)ttl;
if (JVM_SetSockOpt(fd, IPPROTO_IPV6, IPV6_MULTICAST_HOPS,
@@ -1949,6 +1972,7 @@
"Error setting socket option");
}
}
+#endif
/*
* Class: java_net_PlainDatagramSocketImpl
@@ -1971,6 +1995,7 @@
fd = (*env)->GetIntField(env, fdObj, IO_fd_fdID);
}
/* setsockopt to be correct ttl */
+#ifdef AF_INET6
#ifdef __solaris__
if (ipv6_available()) {
setHopLimit(env, fd, ttl);
@@ -1986,7 +2011,10 @@
(*env)->SetIntField(env, this, pdsi_ttlID, ttl);
}
}
-#endif
+#endif // __linux__
+#else
+ setTTL(env, fd, ttl);
+#endif /* AF_INET6 */
}
/*