Повторное использование объекта небезопасно.Для такого вопроса я всегда буду искать источник, поэтому он и открыт.
Так что если вы посмотрите на этот вопрос: http://kickjava.com/src/java/net/ServerSocket.java.htm вы заметите, что в accept()
SocketException (наследуется от IOException), если сокет закрыт или больше не связан.Оба состояния указывают на то, что ServerSocket больше не является допустимым.
Поэтому для этого класса, как правило, если вы терпите неудачу с исключением, всегда старайтесь изящно закрыть ServerSocket в блоке finally, а затем воссоздать его.
Кроме того, в вашей области вопросов для всей Java: Всегда изучайте источник и понимайте, что делает интерфейс.Если это критически важные тесты записи, которые воспроизводят поведение (это не должно быть легко при таком низком уровне API).
Наконец, последовательно ли Java выполняет такие действия?Нет. Некоторые классы не имеют состояния, другие - нет (например, ServerSocket), некоторые - поточно-ориентированные, другие - нет.И вам нужно понять - либо из документации, либо (в основном) из кода - в каком состоянии они построены, чтобы понять, что делать, когда исключение сбивает вас с основного пути.
Большинство людей проклинают ихпроверил исключения Java, потому что большинство из них (как и большинство исключений IOException) в действительности не могут быть восстановлены осмысленным образом.Они утверждают, что в большинстве случаев вы не можете понять каждый прекрасный случай.По этой причине многие сложные фреймворки могут повторить попытку дважды или трижды, если они думают, что в этом случае могут, но в конце концов выдают исключение RuntimeException на верхний уровень фреймворка.Там они делают из этого что-то полезное (содержательная ошибка, обеспечивающая контекст) и регистрируют все детали, которые у них есть, что в большинстве случаев является огромным следом стека.Огромный источник знаний, которого многие разработчики опасаются.
Так что же вы можете сделать, если не смогли оправиться от неопробованной проблемы в кейсе?Подбросьте (возможно, с некоторым подклассом RuntimeException) наиболее значимую трассировку стека, аннотированную всем имеющимся у вас контекстом.Настройка мониторинга.И если вы столкнетесь с частой проблемой, исправьте ее.