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
|