2010-07-01 5 views
0

У меня есть программа тестового драйвера, которая запускает отдельный процесс тестового сервера. Процесс тестового сервера прослушивает локальный порт, и после его завершения тестовый драйвер запускает тест, который обращается к тестовому серверу.Как подождать, пока другой процесс начнет прослушивать локальный порт?

В настоящее время тестовый драйвер неоднократно пытается подключиться к локальному порту (зациклируйте некоторые, попробуйте еще раз, повторите попытку). Это не оптимальное решение и явно ненадежно.

Можно ли ожидать какого-либо события, которое говорит «кто-то слушает в локальном порту»? Попытка подключиться к ранним результатам в ошибке «закрытого порта».

Я хотел бы реализовать решение в Windows, Linux и Mac OS X. Если у вас есть какие-то советы для любой из этих систем, это приветствуется (в каждом случае это будет, вероятно, системным).

ответ

1

В Windows я использую именованное событие для такого рода вещей.

Испытательный жгут может создавать событие и сообщать имя события на сервер, который он запускает; он затем ожидает, когда событие будет сигнализировано перед продолжением теста. Затем сервер подключается к событию, инициализирует себя и как только он готов принять соединения, он сигнализирует о событии.

1

Ну, если вы запустите серверный процесс, вы можете перехватить стандартный вывод сервера?

Так что серверный сервер «запускается» при готовности сокета. Драйвер должен ждать, пока сервер отправит эту строку в stdout, а затем попытайтесь подключиться к серверному порту.

Смежные вопросы