src/solaris/native/java/net/net_util_md.c
Print this page
rev 8822 : 8024854: PPC64: Basic changes and files to build the class library on AIX
Reviewed-by: alanb, prr, sla, chegar, michaelm, mullan, art
Contributed-by: luchsh@linux.vnet.ibm.com, spoole@linux.vnet.ibm.com, thomas.stuefe@sap.com
*** 736,753 ****
}
}
return 0;
}
! void initLocalAddrTable () {
initLoopbackRoutes();
initLocalIfs();
}
#else
! void initLocalAddrTable () {}
#endif
void parseExclusiveBindProperty(JNIEnv *env) {
#ifdef __solaris__
--- 736,762 ----
}
}
return 0;
}
! void platformInit () {
initLoopbackRoutes();
initLocalIfs();
}
+ #elif defined(_AIX)
+
+ /* Initialize stubs for blocking I/O workarounds (see src/solaris/native/java/net/linux_close.c) */
+ extern void aix_close_init();
+
+ void platformInit () {
+ aix_close_init();
+ }
+
#else
! void platformInit () {}
#endif
void parseExclusiveBindProperty(JNIEnv *env) {
#ifdef __solaris__
*** 985,995 ****
--- 994,1008 ----
{ java_net_SocketOptions_SO_OOBINLINE, SOL_SOCKET, SO_OOBINLINE },
{ java_net_SocketOptions_SO_LINGER, SOL_SOCKET, SO_LINGER },
{ java_net_SocketOptions_SO_SNDBUF, SOL_SOCKET, SO_SNDBUF },
{ java_net_SocketOptions_SO_RCVBUF, SOL_SOCKET, SO_RCVBUF },
{ java_net_SocketOptions_SO_KEEPALIVE, SOL_SOCKET, SO_KEEPALIVE },
+ #if defined(_AIX)
+ { java_net_SocketOptions_SO_REUSEADDR, SOL_SOCKET, SO_REUSEPORT },
+ #else
{ java_net_SocketOptions_SO_REUSEADDR, SOL_SOCKET, SO_REUSEADDR },
+ #endif
{ java_net_SocketOptions_SO_BROADCAST, SOL_SOCKET, SO_BROADCAST },
{ java_net_SocketOptions_IP_TOS, IPPROTO_IP, IP_TOS },
{ java_net_SocketOptions_IP_MULTICAST_IF, IPPROTO_IP, IP_MULTICAST_IF },
{ java_net_SocketOptions_IP_MULTICAST_IF2, IPPROTO_IP, IP_MULTICAST_IF },
{ java_net_SocketOptions_IP_MULTICAST_LOOP, IPPROTO_IP, IP_MULTICAST_LOOP },
*** 1385,1394 ****
--- 1398,1430 ----
}
}
}
#endif
+ #ifdef _AIX
+ if (level == SOL_SOCKET) {
+ if (opt == SO_SNDBUF || opt == SO_RCVBUF) {
+ /*
+ * Just try to set the requested size. If it fails we will leave the
+ * socket option as is. Setting the buffer size means only a hint in
+ * the jse2/java software layer, see javadoc. In the previous
+ * solution the buffer has always been truncated to a length of
+ * 0x100000 Byte, even if the technical limit has not been reached.
+ * This kind of absolute truncation was unexpected in the jck tests.
+ */
+ int ret = setsockopt(fd, level, opt, arg, len);
+ if ((ret == 0) || (ret == -1 && errno == ENOBUFS)) {
+ // Accept failure because of insufficient buffer memory resources.
+ return 0;
+ } else {
+ // Deliver all other kinds of errors.
+ return ret;
+ }
+ }
+ }
+ #endif
+
/*
* On Linux the receive buffer is used for both socket
* structures and the the packet payload. The implication
* is that if SO_RCVBUF is too small then small packets
* must be discard.