Bonjour à tous,

J'ai dans mon application une communication avec un serveur. Ce serveur peut parfois fermer la connexion pour X raisons. Coté Java je reçois donc une exception broken pipe :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
try {
	this.client.getWriter().write(buffer);
	this.client.getWriter().flush();
} catch(IOException e) {
	this.client.close();
}
J'essai d'écrire mais la connection à été fermé par le serveur , j'ai donc l'exception broken pipe. De là j'appelle la methode de fermeture de mon client réseau :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
public void close()
{
	if(this.socket != null && !this.socket.isClosed()
	{
		try{
			this.writer.write(bufferCloseConnection);
			this.writer.flush();
			this.writer.close();
			this.reader.close();
			this.socket.close();
		} catch(IOException e) {
			e.printStacktrace();
		}
	}
}
Or cette méthode de fermeture envoi normalement un message au serveur pour l'informer que l'on ferme la connexion. Message qui ne peut être envoyé à cause de l'exception précédente.

D'ou ma question , comment gérer au mieux cette exception broken pipe ? Devrais je plutôt faire une seconde méthode de fermeture qui ne serait appelée que dans le cas ou la fermeture est non demandée par le client ?

Est il nécessaire de procéder au close() du writer/reader et de la socket sachant que la connexion à été fermé par le serveur ?

merci