In source code "jdk\src\solaris\native\java\net\PlainDatagramSocketImpl.c",
there are several macros in the form of:
#ifdef AF_INET6
#if defined(__solaris__) || defined(MACOSX)
// code for solaris and macosx (unix) [1]
#endif
#ifdef __linux__
// code for linux
#endif
#else
// code for non AF_INET6
#endif /* AF_INET6 */
The code blocks enclosed by the macro are method invocations of
mcast_set_if_by_addr_v6(), mcast_set_if_by_addr_v4(),
mcast_set_loop_v4(), mcast_set_loop_v6(), setHopLimit() and setTTL().
Other unix-like os, i.e. AIX, BSD and some others need the exact calling
sequence coded in block [1]. This CR proposes to a adopt the following
pattern:
#ifdef AF_INET6
#ifdef __linux__
// code for linux
#else /* __linux__ not defined */
// code for UNIX
#endif /* __linux__ */
#else
// non AF_INET6
#endif /* AF_INET6 */
see the full discussion on the net-dev mailing list:
http://mail.openjdk.java.net/pipermail/net-dev/2012-August/004620.html