Как я закрываю порт в случае завершения программы?

Код выхода процесса кипариса даст вам количество неудачных тестов:

npm run cypress
# ... cypress runs...
echo $? # print number of failed tests

Или для Windows cmd: напечатать код выхода в cmd в Windows OS [113 ]

8
задан Chathuranga Chandrasekara 20 April 2009 в 07:50
поделиться

4 ответа

Похоже, ваша программа прослушивает сокет. Обычно, когда ваша программа выходит, ОС закрывает все сокеты, которые могут быть открыты (включая сокеты прослушивания). Однако для прослушивания сокетов ОС обычно резервирует порт на некоторое время (несколько минут) после выхода из программы, чтобы она могла обрабатывать любые невыполненные попытки подключения. Вы можете заметить, что если вы неправильно завершили свою программу, а затем вернулись через некоторое время, она запустилась просто отлично.

Если вы хотите избежать этого времени задержки, вы можете использовать setsockopt () для настройте сокет с параметром SO_REUSEADDR. Это говорит ОС, что вы знаете, что можно повторно использовать тот же адрес, и вы не столкнетесь с этой проблемой.

Вы можете установить эту опцию в Java с помощью ServerSocket.setReuseAddress (true) метод.

22
ответ дан 5 December 2019 в 05:34
поделиться

Вы хотите установить флаг SO_REUSEADDR на сокете

См. http://java.sun.com/j2se/1.4.2/docs/api/java/net/ServerSocket.html#setReuseAddress ( boolean)

4
ответ дан 5 December 2019 в 05:34
поделиться

Операционная система должна обрабатывать такие вещи автоматически после завершения процесса JVM. Однако может быть небольшая задержка до закрытия порта.

2
ответ дан 5 December 2019 в 05:34
поделиться

Как упоминалось в Обработка аварийных выходов из программы Java , вы можете установить Runtime Метод .addShutdownHook () для работы с любым частным случаем, если ему действительно требуется явная операция.

2
ответ дан 5 December 2019 в 05:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: