Hola:
Si el socket se cierra de mala manera sin seguir el protocolo es difícil detectarlo (pérdida de conexión a internet o apagado brusco del ordenador).
Puedes probar a poner la opcion SO_KEEP_ALIVE (setKeepAlive(true)). Esto hace que por debajo y sin que tu te enteres el socket mantenga una especie de ping en la conexión, haciendo que salten las excepciones más fácilmente cuando intentes leer o escribir.
http://tldp.org/HOWTO/html_single/TC...-HOWTO/#whatis
Se bueno.