Innovenergy_trunk/csharp/Lib/Utils/Net/NetUtils.cs

32 lines
939 B
C#

using System.Net.NetworkInformation;
namespace InnovEnergy.Lib.Utils.Net;
public static class NetUtils
{
public static Int32 GetAvailableTcpPort()
{
const Int32 minPort = 1024;
var ipProps = IPGlobalProperties.GetIPGlobalProperties();
var tcpConnections = ipProps
.GetActiveTcpConnections()
.Select(c => c.LocalEndPoint.Port)
.Where(p => p >= minPort);
var tcpListeners = ipProps
.GetActiveTcpListeners()
.Select(c => c.Port)
.Where(p => p >= minPort);
var usedPorts = tcpConnections
.Concat(tcpListeners)
.ToHashSet();
return Enumerable
.Range(minPort, UInt16.MaxValue - minPort)
.Unless(usedPorts.Contains)
.First();
}
}