summaryrefslogtreecommitdiff
path: root/csharp
diff options
context:
space:
mode:
Diffstat (limited to 'csharp')
-rw-r--r--csharp/src/Ice/Network.cs44
-rw-r--r--csharp/test/Glacier2/router/Client.cs13
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;
{