Если ваше программное обеспечение просто ожидает данные от устройства домашней автоматизации, единственный способ обнаружить, что устройство пропало, - включить опцию SO_KEEPALIVE в открытом гнезде для связи с устройством.
Чтобы сделать это, просто вызовите метод setKeepAlive (true) для сокета, и это заставит базовую реализацию сокета включить опцию SO_KEEP_ALIVE.
Это приведет к тому, что базовая реализация будет периодически обмениваться некоторыми данными с удаленной конечной точкой, и если устройство умирает, пока вы ожидаете данных, будет выдано исключение.
Единственная проблема заключается в том, что это время ожидания зависит от операционной системы и иногда не может быть изменено.
Если вам нужны более короткие тайм-ауты, нет другого способа, кроме использования периодического зонда на устройстве.