提交 ea34eeb2 编写于 作者: R robm

8075738: Better multi-JVM sharing

Reviewed-by: michaelm
上级 09c656fc
...@@ -1521,6 +1521,7 @@ NET_Bind(int fd, struct sockaddr *him, int len) ...@@ -1521,6 +1521,7 @@ NET_Bind(int fd, struct sockaddr *him, int len)
int exclbind = -1; int exclbind = -1;
#endif #endif
int rv; int rv;
int arg, alen;
#ifdef __linux__ #ifdef __linux__
/* /*
...@@ -1537,7 +1538,7 @@ NET_Bind(int fd, struct sockaddr *him, int len) ...@@ -1537,7 +1538,7 @@ NET_Bind(int fd, struct sockaddr *him, int len)
} }
#endif #endif
#if defined(__solaris__) && defined(AF_INET6) #if defined(__solaris__)
/* /*
* Solaris has separate IPv4 and IPv6 port spaces so we * Solaris has separate IPv4 and IPv6 port spaces so we
* use an exclusive bind when SO_REUSEADDR is not used to * use an exclusive bind when SO_REUSEADDR is not used to
...@@ -1547,21 +1548,18 @@ NET_Bind(int fd, struct sockaddr *him, int len) ...@@ -1547,21 +1548,18 @@ NET_Bind(int fd, struct sockaddr *him, int len)
* results in a late bind that fails because the * results in a late bind that fails because the
* corresponding IPv4 port is in use. * corresponding IPv4 port is in use.
*/ */
if (ipv6_available()) { alen = sizeof(arg);
int arg, len;
len = sizeof(arg);
if (useExclBind || getsockopt(fd, SOL_SOCKET, SO_REUSEADDR, if (useExclBind || getsockopt(fd, SOL_SOCKET, SO_REUSEADDR,
(char *)&arg, &len) == 0) { (char *)&arg, &alen) == 0) {
if (useExclBind || arg == 0) { if (useExclBind || arg == 0) {
/* /*
* SO_REUSEADDR is disabled or sun.net.useExclusiveBind * SO_REUSEADDR is disabled or sun.net.useExclusiveBind
* property is true so enable TCP_EXCLBIND or * property is true so enable TCP_EXCLBIND or
* UDP_EXCLBIND * UDP_EXCLBIND
*/ */
len = sizeof(arg); alen = sizeof(arg);
if (getsockopt(fd, SOL_SOCKET, SO_TYPE, (char *)&arg, if (getsockopt(fd, SOL_SOCKET, SO_TYPE, (char *)&arg,
&len) == 0) { &alen) == 0) {
if (arg == SOCK_STREAM) { if (arg == SOCK_STREAM) {
level = IPPROTO_TCP; level = IPPROTO_TCP;
exclbind = TCP_EXCLBIND; exclbind = TCP_EXCLBIND;
...@@ -1576,7 +1574,6 @@ NET_Bind(int fd, struct sockaddr *him, int len) ...@@ -1576,7 +1574,6 @@ NET_Bind(int fd, struct sockaddr *him, int len)
sizeof(arg)); sizeof(arg));
} }
} }
}
#endif #endif
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册