SocketChannel: java.io.IOException: Une connexion existante a dû être fermée par l'hôte distant

Je suis en utilisant un SocketChannel avec un socket réseau, et d'avoir à gérer l'exception prévue à l autre extrémité de la douille de fermeture du canal de façon inattendue.

Le problème est, je reçois ce IOException:

java.io.IOException: An existing connection was forcibly closed by the remote host
    at sun.nio.ch.SocketDispatcher.read0(Native Method)
    at sun.nio.ch.SocketDispatcher.read(Unknown Source)
    at sun.nio.ch.IOUtil.readIntoNativeBuffer(Unknown Source)
    at sun.nio.ch.IOUtil.read(Unknown Source)
    at sun.nio.ch.SocketChannelImpl.read(Unknown Source)
    ...

J'ai besoin de distinguer entre cette exception, qui est susceptible de se produire, et les exceptions inattendues, de sorte que je peux me connecter/imprimer l'inattendu et la poignée de celui-ci. Mais c'est juste un ordinaire IOException avec un autre message texte, et bien que je vérifie toujours SocketChannel.isOpen() et SocketChannel.isConnected(), ils semblent revenir de vrai dans cette affaire, même si l'autre extrémité de la douille a été fermé.

Ce qui peut/doit-je faire?

Attendez, il est prévu de se produire? Comme dans, vous voulez vraiment arriver?
Je n'ai pas veux ça arrive, mais ça arrive tout le temps: l'autre extrémité de la prise ferme quand il se sent comme il. Je n'ai pas une bande mécanisme qui dit "OK, au Revoir!" afin que le serveur sait quand s'arrêter de communication, donc, je dois faire face. Et le réseau peut aller vers le bas, et que ce soit. Je veux traiter ce cas comme d'habitude.

OriginalL'auteur Jason S | 2011-04-12