Socket não fecha! [RESOLVIDO]

Galera to entregando um projeto…
mas to com um mega problema…

seguinte… tenho um programa em C++ q é meu ServerSocket ok?!

meu cliente é uma classe em Java…
eu estabeleço uam conexão socket com um new Socket(maquina,porta);

consigo escrever usando BufferedWriter e le a resposta com BufferedReader, na boa! td ok! o problema é…

qnd eu fecho meu programa feito em C++… dai meu programinha em java tenta escrever… p ele escreve!!! ele não ve q a conxeão fechou!!

tentei usar os metodos…
isBound()
isClosed()
isConnected()
e nenhum me diz se perder a conexão!

alguem ja passou por isso? como resolver???
isso está me atrasando nessa entrega…

abraços!!!

kubanacan,

já tentasse fazer o seguinte.

Quando você fechar seu programa feito em C++, manda um padrão de caracteres que indica que sua aplicação c++ fechou. Aí seu programa em java receberá isso e saberá que deverá fechar a conexão.

Na verdade, demora um pouco mesmo para o Socket perceber que a conexão fechou. O problema não está na implementação do Socket no Java, mas na pilha TCP/IP que é implementada dessa forma. Pense bem, a internet é feita para trabalhar com máquinas que podem ir e vir com relativa facilidade, então é de se esperar que leve algum tempo que o Socket perceba que alguma coisa deu errado.

Por exemplo, pode acontecer de você fechar um socket no servidor e, ao tentar reabri-lo no cliente, esse não percebe que o Socket fechou e diz para você que não pode fazer “bind” pq um outro socket está ligado por lá! E quem é esse outro socket? É um “fantasma” da conexão passada.

O problema que citei é um dos exemplos. Existe até um método para atenua-lo chamado setReuseAddress().

Uma das saídas é realmente a que o colega deu, usar um comando na camada de aplicação. Mas nem sempre isso é possível (você pode nem ter o código da aplicação C++, por exemplo).

Outra é conviver com o problema. Por isso existem protocolos de aplicação que implementam algoritmos de keep alive mais curtos do que o do TCP. Enfim, seja qual for a solução que você vai adotar, saiba que essa não é uma situação incomum ou que é um erro de sua lógica.

Sakei…
valeu pelo esclarecimento ViniGodoy e pela dica Petrônio.

vou fazer isso!!

abraços