39 lines
1.3 KiB
C#
39 lines
1.3 KiB
C#
using System.Linq;
|
|
using System.Net;
|
|
using System.Net.NetworkInformation;
|
|
using System.Net.Sockets;
|
|
|
|
namespace Mongo2Go.Helper
|
|
{
|
|
public class PortWatcher : IPortWatcher
|
|
{
|
|
public int FindOpenPort()
|
|
{
|
|
// Locate a free port on the local machine by binding a socket to
|
|
// an IPEndPoint using IPAddress.Any and port 0. The socket will
|
|
// select a free port.
|
|
int listeningPort = 0;
|
|
Socket portSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
|
|
try
|
|
{
|
|
IPEndPoint socketEndPoint = new IPEndPoint(IPAddress.Any, 0);
|
|
portSocket.Bind(socketEndPoint);
|
|
socketEndPoint = (IPEndPoint)portSocket.LocalEndPoint;
|
|
listeningPort = socketEndPoint.Port;
|
|
}
|
|
finally
|
|
{
|
|
portSocket.Close();
|
|
}
|
|
|
|
return listeningPort;
|
|
}
|
|
|
|
public bool IsPortAvailable(int portNumber)
|
|
{
|
|
IPEndPoint[] tcpConnInfoArray = IPGlobalProperties.GetIPGlobalProperties().GetActiveTcpListeners();
|
|
return tcpConnInfoArray.All(endpoint => endpoint.Port != portNumber);
|
|
}
|
|
}
|
|
}
|