Проблема в том, что в tcp-соединениях нет события 'сеть отключена', они просто отключаются.
По предложению Джерома вам следует проверить, не истекло ли время ожидания.
Конечно, если сеть выйдет из строя, вы не сможете получать пакеты и не сможете отправлять их, поэтому базовые InputStream
и OutputStream
сгенерируют IOException
, но только когда они поймут, что сеть не работает должным образом (обычно 2*rtt = 120
секунд, это зависит от того, как управляется уровень TCP).
Смотрите диаграмму состояний самостоятельно:

Что обычно происходит, когда в ESTABLISHED ваш сокет будет отправлять данные через сокет в ожидании ACK от места назначения. ACK не придет, так как сеть отключилась, поэтому окно вашего сокета заполняется, и сокет начинает пересылать пакеты, пока не истечет реальный тайм-аут, выдав исключение.
Другой случай, когда сеть отключается, и ваш сокет понимает, что он больше не может записывать на канал: он немедленно выдаст исключение при вызове outStream.write(...)
.