У нас есть клиент Java, который поддерживает постоянное соединение через сокет с удаленным сервером. Клиент опрашивает таблицу БД каждые 15 секунд, и если появляется новый элемент, он сериализуется и записывает его в сокет.
Перед записью в выходной поток я хотел бы проверить, исправно ли соединение с сокетом. Для логики конкретного приложения выполнить эту упреждающую проверку проще, чем перехват исключения и повторное подключение.
Я использовал следующий код, чтобы выяснить, какой метод может сообщить мне, когда соединение разорвано:
LOG.debug("Socket status: bound=" + _socket.isBound() + ", closed=" + _socket.isClosed() + ", connected=" + _socket.isConnected() + ", outputShutdown=" + _socket.isOutputShutdown() + ", inputShutdown=" + _socket.isOutputShutdown());
Я ненадолго отключил сетевой адаптер, и во время следующего опроса, как и ожидалось, при записи в сокет произошло исключение.
Однако оператор отладки напечатал следующее:
"Socket status: bound=true, closed=false, connected=true, outputShutdown=false, inputShutdown=false"
Я ожидал, что либо закрыто, чтобы быть истинным, либо связано, чтобы быть ложным. Какие реальные значения я получаю, кажется ложью.
Есть ли способ надежно проверить состояние соединения сокета?