diff options
Diffstat (limited to 'csharp')
-rw-r--r-- | csharp/src/Ice/Network.cs | 44 | ||||
-rw-r--r-- | csharp/test/Glacier2/router/Client.cs | 13 |
2 files changed, 48 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) { diff --git a/csharp/test/Glacier2/router/Client.cs b/csharp/test/Glacier2/router/Client.cs index a996bb0275a..795aaeb730a 100644 --- a/csharp/test/Glacier2/router/Client.cs +++ b/csharp/test/Glacier2/router/Client.cs @@ -165,6 +165,19 @@ public class Client : TestCommon.Application Console.Out.WriteLine("ok"); } + { + Console.Out.Write("pinging object with client endpoint... "); + Ice.ObjectPrx baseC = communicator().stringToProxy("collocated:" + getTestEndpoint(50)); + try + { + baseC.ice_ping(); + } + catch(Ice.ObjectNotExistException) + { + } + Console.Out.WriteLine("ok"); + } + CallbackPrx twoway; { |