# HG changeset patch # User robm # Date 1429646311 -3600 # Node ID 48b8e08a6d12ae4845c68ea8cb2540ecce0a5c9a # Parent 2f0bce4ee0de9586fabb38b80edd844814409be9 8075738: Better multi-JVM sharing Reviewed-by: michaelm diff -r 2f0bce4ee0de -r 48b8e08a6d12 src/solaris/native/java/net/net_util_md.c --- a/src/solaris/native/java/net/net_util_md.c Wed Apr 22 00:24:58 2015 +0300 +++ b/src/solaris/native/java/net/net_util_md.c Tue Apr 21 20:58:31 2015 +0100 @@ -1521,6 +1521,7 @@ int exclbind = -1; #endif int rv; + int arg, alen; #ifdef __linux__ /* @@ -1537,7 +1538,7 @@ } #endif -#if defined(__solaris__) && defined(AF_INET6) +#if defined(__solaris__) /* * Solaris has separate IPv4 and IPv6 port spaces so we * use an exclusive bind when SO_REUSEADDR is not used to @@ -1547,35 +1548,31 @@ * results in a late bind that fails because the * corresponding IPv4 port is in use. */ - if (ipv6_available()) { - int arg, len; + alen = sizeof(arg); + if (useExclBind || getsockopt(fd, SOL_SOCKET, SO_REUSEADDR, + (char *)&arg, &alen) == 0) { + if (useExclBind || arg == 0) { + /* + * SO_REUSEADDR is disabled or sun.net.useExclusiveBind + * property is true so enable TCP_EXCLBIND or + * UDP_EXCLBIND + */ + alen = sizeof(arg); + if (getsockopt(fd, SOL_SOCKET, SO_TYPE, (char *)&arg, + &alen) == 0) { + if (arg == SOCK_STREAM) { + level = IPPROTO_TCP; + exclbind = TCP_EXCLBIND; + } else { + level = IPPROTO_UDP; + exclbind = UDP_EXCLBIND; + } + } - len = sizeof(arg); - if (useExclBind || getsockopt(fd, SOL_SOCKET, SO_REUSEADDR, - (char *)&arg, &len) == 0) { - if (useExclBind || arg == 0) { - /* - * SO_REUSEADDR is disabled or sun.net.useExclusiveBind - * property is true so enable TCP_EXCLBIND or - * UDP_EXCLBIND - */ - len = sizeof(arg); - if (getsockopt(fd, SOL_SOCKET, SO_TYPE, (char *)&arg, - &len) == 0) { - if (arg == SOCK_STREAM) { - level = IPPROTO_TCP; - exclbind = TCP_EXCLBIND; - } else { - level = IPPROTO_UDP; - exclbind = UDP_EXCLBIND; - } - } - - arg = 1; - setsockopt(fd, level, exclbind, (char *)&arg, - sizeof(arg)); + arg = 1; + setsockopt(fd, level, exclbind, (char *)&arg, + sizeof(arg)); } - } } #endif