summaryrefslogtreecommitdiff
path: root/csharp/src
diff options
context:
space:
mode:
Diffstat (limited to 'csharp/src')
-rw-r--r--csharp/src/Ice/Network.cs44
1 files changed, 35 insertions, 9 deletions
diff --git a/csharp/src/Ice/Network.cs b/csharp/src/Ice/Network.cs
index fa64b8d004d..465d0ba35f9 100644
--- a/csharp/src/Ice/Network.cs
+++ b/csharp/src/Ice/Network.cs
@@ -739,14 +739,20 @@ namespace IceInternal
List<EndPoint> addresses = new List<EndPoint>();
if(host.Length == 0)
{
- if(protocol != EnableIPv4)
+ foreach(IPAddress a in getLoopbackAddresses(protocol))
{
- addresses.Add(new IPEndPoint(IPAddress.IPv6Loopback, port));
+ addresses.Add(new IPEndPoint(a, port));
}
-
- if(protocol != EnableIPv6)
+ if(protocol == EnableBoth)
{
- addresses.Add(new IPEndPoint(IPAddress.Loopback, port));
+ if(preferIPv6)
+ {
+ IceUtilInternal.Collections.Sort(ref addresses, _preferIPv6Comparator);
+ }
+ else
+ {
+ IceUtilInternal.Collections.Sort(ref addresses, _preferIPv4Comparator);
+ }
}
return addresses;
}
@@ -973,14 +979,21 @@ namespace IceInternal
bool ipv4Wildcard = false;
if(isWildcard(host, out ipv4Wildcard))
{
- IPAddress[] addrs = getLocalAddresses(ipv4Wildcard ? EnableIPv4 : protocol, includeLoopback);
- foreach(IPAddress a in addrs)
+ foreach(IPAddress a in getLocalAddresses(ipv4Wildcard ? EnableIPv4 : protocol, includeLoopback))
{
if(!isLinklocal(a))
{
hosts.Add(a.ToString());
}
}
+ if(hosts.Count == 0)
+ {
+ // Return loopback if only loopback is available no other local addresses are available.
+ foreach(IPAddress a in getLoopbackAddresses(protocol))
+ {
+ hosts.Add(a.ToString());
+ }
+ }
}
return hosts;
}
@@ -991,8 +1004,7 @@ namespace IceInternal
bool ipv4Wildcard = false;
if(isWildcard(intf, out ipv4Wildcard))
{
- IPAddress[] addrs = getLocalAddresses(ipv4Wildcard ? EnableIPv4 : protocol, true);
- foreach(IPAddress a in addrs)
+ foreach(IPAddress a in getLocalAddresses(ipv4Wildcard ? EnableIPv4 : protocol, true))
{
interfaces.Add(a.ToString());
}
@@ -1245,6 +1257,20 @@ namespace IceInternal
return false;
}
+ public static List<IPAddress> getLoopbackAddresses(int protocol)
+ {
+ List<IPAddress> addresses = new List<IPAddress>();
+ if(protocol != EnableIPv4)
+ {
+ addresses.Add(IPAddress.IPv6Loopback);
+ }
+ if(protocol != EnableIPv6)
+ {
+ addresses.Add(IPAddress.Loopback);
+ }
+ return addresses;
+ }
+
public static bool
addressEquals(EndPoint addr1, EndPoint addr2)
{