Закрытие ServerSocket означает, что обработчик server1
не обрабатывает новые входящие соединения, об этом заботится server2
.Все идет нормально.Вы можете собирать мусор server1, когда на нем больше нет подключенных Socket
s.
В течение определенного периода времени (короче или дольше) порт помечается как «не открытый» в сети ОС.драйвер после закрытия первого ServerSocket и открытия второго (поскольку ОС не может знать о нашем намерении запустить новый сокет сразу после закрытия первого).
Входящий запрос TCP в течение этого времени получитсообщение от ОС о том, что порт не открыт и, скорее всего, не будет повторяться, поскольку получено подтверждение, что порт не был открыт.
A Возможное решение
Используйте Java-конструкции NIO, которые порождают новый поток для каждого входящего запроса, смотрите ServerSocketChannel и не забудьте проверить библиотеку http://netty.io/, которая имеет несколько конструкций для этого.
Убедитесь, чточто вы можете установить обработчик для входящего запроса динамически (и потокобезопасно :), это позволит беспрепятственно изменять handling входящих запросов, но вы не сможете обменять ServerSocket (но, скорее всего, это не совсем то, что вам нужно).