Поскольку вы используете HttpListener (и, следовательно, TCP-соединения), вы можете получить список активных прослушивателей TCP с помощью метода GetActiveTcpListeners
объекта IPGlobalProperties
и проверить их свойство Port
.
Возможное решение может выглядеть следующим образом:
private static bool TryGetUnusedPort(int startingPort, ref int port)
{
var listeners = IPGlobalProperties.GetIPGlobalProperties().GetActiveTcpListeners();
for (var i = startingPort; i <= 65535; i++)
{
if (listeners.Any(x => x.Port == i)) continue;
port = i;
return true;
}
return false;
}
Этот код найдет первый неиспользуемый порт, начиная с номера порта startingPort
и вернув true
. Если все порты уже заняты (что маловероятно), метод возвращает false
.
Также помните о возможности состояния гонки, которое может произойти, если какой-либо другой процесс захватит найденный порт раньше вас.