Как я могу найти неиспользуемый порт? - PullRequest
3 голосов
/ 06 августа 2010

Мне нужно создать мозговой сервер HTTP, который возвращает 404 для всего на локальном хосте.В частности, у меня есть программа в жгуте приемочного теста, которая обращается к серверу, но для тестирования я хочу сэкономить время, пропустив эту несвязанную проверку.

У меня есть способ передать URL, который использует программакак часть тестового набора, и тестовый набор (в настоящее время) просто создает такой сервер на порту 80.

Однако возникает проблема, если более одного теста пытается выполняться одновременно, потому что каждый тестHarness пытается создать HTTP-сервер на порту 80, который не работает на одном из каналов.

Поэтому я хотел бы рандомизировать порт и убедиться, что он доступен, прежде чем пытаться создать HTTP-сервер.Как я могу проверить, используется ли этот порт?

Ответы [ 4 ]

11 голосов
/ 06 августа 2010

Свяжите сокет с портом 0, система выберет доступный порт, между 1024 и 5000, я думаю

Позже вы можете узнать этот назначенный порт с помощью свойства Socket.LocalEndPoint.

1 голос
/ 06 августа 2010

Я бы подумал, что ответ очевиден: если прослушивание сокета не удается, он недоступен: выберите другой. Просто слушайте исключения.

0 голосов
/ 06 августа 2010
Socket.Select()

IIRC

0 голосов
/ 06 августа 2010

Почему бы не смоделировать запрос в целом, чтобы вообще не нуждаться в сервере или сетевом соединении?

Это сделало бы тест намного менее хрупким.

ХорошоВ любом случае, вы могли бы не просто создать случайный порт в некотором предопределенном диапазоне, а попытаться настроить на нем сервер?Если он уже занят, должно быть сгенерировано исключение.

...