Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
ai.fluctio.fluctio-sim / EditorUtils / Http / PortFinders.cs
Size: Mime:
using System;
using System.Collections.Generic;
using System.Net;
using System.Net.Sockets;

namespace Fluctio.FluctioSim.EditorUtils.Http
{
	public static class PortFinders
	{
		public static Func<int?> Constant(int port)
		{
			return () => port;
		}
		
		public static Func<int?> FromList(IEnumerable<int> possibleValues)
		{
			return () =>
			{
				foreach (var port in possibleValues)
				{
					var listener = new TcpListener(IPAddress.Loopback, port);
					try
					{
						listener.Start();
						return port;
					}
					finally
					{
						listener.Stop();
					}
				}
				return null;
			};
		}

		// https://stackoverflow.com/a/3978040/6702274
		// https://stackoverflow.com/a/150974/6702274
		// https://github.com/googlesamples/oauth-apps-for-windows/blob/ab9373d1a470e1aecb90fb263f9daf6ebc4ff643/OAuthConsoleApp/OAuthConsoleApp/Program.cs#L59
		public static int? SelectedBySystem()
		{
			var listener = new TcpListener(IPAddress.Loopback, 0);
			try
			{
				listener.Start();
				var endPoint = (IPEndPoint)listener.LocalEndpoint;
				var port = endPoint.Port;
				return port;
			}
			catch
			{
				return null;
			}
			finally
			{
				listener.Stop();
			}
		}
	}
}