Identificar Fechamento de socket pelo cliente

Ola galera,
Tenho o seguinte cenário.
Uma thread por socket aberto, onde ela faz todo o controle de envio e leitura de dados.
Preciso identificar quando um cliente fecha a conexão de um socket, existe alguma forma de fazer isso sem manipular um SocketException?
Pois preciso efetuar varios procedimentos quando uma conexão for fechada, os sockets quando fechados pelo cliente e não pelo servidor ainda ficam abertos? Ou o fechamento dele é feito automaticamente?

Ronaldo

Os caras fizeram algo parecido…
http://forums.sun.com/thread.jspa?threadID=554421

Lí o link indicado pelo amigo oitavo_anjo e achei interessante; acredito que antes de tentar qualquer outra coisa vc poderia verificar se o que os caras fizeram funciona realmente sem deixar espaço para falhas.

Mas mesmo assim, vou indicar mais esta idéia caso todo o resto falhe:

Construa um componente para o lado client e outro para o lado server; o único trabalho destes dois componentes é ficar enviando uma minuscula mensagem um para o outro (algo do tamanho de 1 byte) informando que estão em execução. Resumindo…o componente que está no server pergunta para o componente que está no cliente “você esta em execução?”, o componente no lodo client deverá responder “Sim estou executando!”, se o componente que está no lado client não responder em 3 tentativas vamos dizer assim (vc configura) vc poderá assumir que o client não está mais em execução e tomar as providencias.

Os dois componentes tem que estar sob o domínio de threads, para não atrapalhar a execução das outras partes do seu sistema; os módulos interessados em saber se o client está em execução deverão perguntar para os componentes descritos acima, se a resposta for positiva segue a execução normalmente caso contrario tomar as providencias apropriadas.

Considero esta solução um pouco complexa e desafiadora, espero que vc encontre algo bem mais simples e inteligente que isto.

flws

Caros,
Valeu pelas respostas, implementei isso facilmente com Apache Mina.
A nova API NIO tem suporte a isso através de java.nio.channels.SelectionKey.OP_CONNECT

Ronaldo.

Oi rrigoni

Apache Mina para mim é uma novidade, dei uma olhada no site e fiquei bastante interessado.

Fora a doc. que tem por lá você conhece algum tutorial / livro para indicar?

flws

fantomas,
Eu implementei um server de chat, e também estou migrando um jogo de bingo inteiro que até então tinha implementado com sockets e threads puro,
Apenas segui os tutoriais, tem dois pdfs que podem te ajudar http://directory.apache.org/subprojects/network/mina.pdf e este tutorial
http://wiki.apache.org/directory/MinaTutorial , veja nos exemplos que vem junto com a documentação são muito simples.
Se quiser te passo o que codifiquei.

Ronaldo