static string GetReachableIPAddress()

in gateway/Program.cs [113:162]


        static string GetReachableIPAddress()
        {
            var resolverPort = int.Parse(proxyResolverEndpointPort);
            for (int i = 0; i < ConnectRetryCount; i++)
            {
                foreach (NetworkInterface networkInterface in NetworkInterface.GetAllNetworkInterfaces())
                {
                    foreach (var address in networkInterface.GetIPProperties().GatewayAddresses)
                    {
                        if (IPAddress.IsLoopback(address.Address) || address.Address.AddressFamily != AddressFamily.InterNetwork)
                        {
                            continue;
                        }

                        LogMessage(string.Format("Trying to connect to : {0}:{1}",
                            address.Address.ToString(),
                            proxyResolverEndpointPort));

                        Socket s = new Socket(
                            AddressFamily.InterNetwork,
                            SocketType.Stream,
                            ProtocolType.Tcp);
                        try
                        {
                            IAsyncResult result = s.BeginConnect(address.Address.ToString(), resolverPort, null, null);
                            result.AsyncWaitHandle.WaitOne(EndpointConnectTimeout, true);

                            if (s.Connected)
                            {
                                LogMessage(string.Format("Sucessfully connected : {0}:{1}",
                                    address.Address.ToString(),
                                    proxyResolverEndpointPort));

                                s.Close();
                                s = null;

                                return address.Address.ToString();
                            }
                        }
                        catch (Exception)
                        {
                        }
                    }
                    Task.Delay(DelayBetweenRetry);
                }
            }

            LogMessage(string.Format("Did not find a reachable IP for: {0}", fabricNodeIpOrFQDN));
            return null;
        }