diff options
Diffstat (limited to 'java/src')
-rw-r--r-- | java/src/Ice/src/main/java/IceInternal/Instance.java | 3 | ||||
-rw-r--r-- | java/src/Ice/src/main/java/IceInternal/Network.java | 16 |
2 files changed, 18 insertions, 1 deletions
diff --git a/java/src/Ice/src/main/java/IceInternal/Instance.java b/java/src/Ice/src/main/java/IceInternal/Instance.java index b76076e4499..0f6f809c8a1 100644 --- a/java/src/Ice/src/main/java/IceInternal/Instance.java +++ b/java/src/Ice/src/main/java/IceInternal/Instance.java @@ -952,8 +952,9 @@ public final class Instance _proxyFactory = new ProxyFactory(this); + boolean isIPv6Supported = Network.isIPv6Supported(); boolean ipv4 = _initData.properties.getPropertyAsIntWithDefault("Ice.IPv4", 1) > 0; - boolean ipv6 = _initData.properties.getPropertyAsIntWithDefault("Ice.IPv6", 1) > 0; + boolean ipv6 = _initData.properties.getPropertyAsIntWithDefault("Ice.IPv6", isIPv6Supported ? 1 : 0) > 0; if(!ipv4 && !ipv6) { throw new Ice.InitializationException("Both IPV4 and IPv6 support cannot be disabled."); diff --git a/java/src/Ice/src/main/java/IceInternal/Network.java b/java/src/Ice/src/main/java/IceInternal/Network.java index 4bf221eb315..f2406a3c0dd 100644 --- a/java/src/Ice/src/main/java/IceInternal/Network.java +++ b/java/src/Ice/src/main/java/IceInternal/Network.java @@ -117,6 +117,22 @@ public final class Network return false; } + public static boolean + isIPv6Supported() + { + try + { + java.net.Socket socket = new java.net.Socket(); + socket.bind(new java.net.InetSocketAddress(java.net.InetAddress.getByName("::1"), 0)); + socket.close(); + return true; + } + catch(java.io.IOException ex) + { + return false; + } + } + public static java.nio.channels.SocketChannel createTcpSocket() { |