summaryrefslogtreecommitdiff
path: root/java/src
diff options
context:
space:
mode:
Diffstat (limited to 'java/src')
-rw-r--r--java/src/Ice/src/main/java/IceInternal/Instance.java3
-rw-r--r--java/src/Ice/src/main/java/IceInternal/Network.java16
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()
{