From 7ee95a458ce6319dd204483c7bb436d7a56c2bc8 Mon Sep 17 00:00:00 2001 From: Rob McKenna Date: Tue, 21 Apr 2015 20:33:34 +0100 Subject: [PATCH] 8075738: Better multi-JVM sharing Reviewed-by: michaelm --- .../unix/native/libnet/net_util_md.c | 51 +++++++++---------- 1 file changed, 24 insertions(+), 27 deletions(-) diff --git a/jdk/src/java.base/unix/native/libnet/net_util_md.c b/jdk/src/java.base/unix/native/libnet/net_util_md.c index c2951b3a489..f5645699d29 100644 --- a/jdk/src/java.base/unix/native/libnet/net_util_md.c +++ b/jdk/src/java.base/unix/native/libnet/net_util_md.c @@ -1524,6 +1524,7 @@ NET_Bind(int fd, struct sockaddr *him, int len) int exclbind = -1; #endif int rv; + int arg, alen; #ifdef __linux__ /* @@ -1540,7 +1541,7 @@ NET_Bind(int fd, struct sockaddr *him, int len) } #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 @@ -1550,35 +1551,31 @@ NET_Bind(int fd, struct sockaddr *him, int len) * results in a late bind that fails because the * corresponding IPv4 port is in use. */ - if (ipv6_available()) { - int arg; - socklen_t len; + alen = sizeof(arg); - 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; - } + 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; } - - arg = 1; - setsockopt(fd, level, exclbind, (char *)&arg, - sizeof(arg)); } + + arg = 1; + setsockopt(fd, level, exclbind, (char *)&arg, + sizeof(arg)); } }