Tenho um servidor Java que escuta numa porta via um ServerSocket e abre um
Thread para cada requisi��o que ele recebe. Esse Thread recebe o socket e
abre um BufferedReader (in) e um PrintStream (out) para se comunicar com o
cliente.
O problema � o seguinte:
Alguns in.readLine() fica bloqueados para sempre, ou seja, nunca retornam.
J� andei investigando e descobri que temos que usar
socket.setKeepAlive(true), para o TCPIP checar periodicamente se o socket
est� vivo ou se o cliente desapareceu silenciosamente. (Como experi�ncia,
conecte duas m�quinas via um socket e desligue o cabo de rede de uma delas.
A outra vai ficar travada num in.readLine() eternamente se voc� n�o estiver
usando o KeepAlive!)
Tb temos que setar o parametro KeepAliveTime no registry do windows, que o
intervalo em milisegundos que o Windows vai dar um ping no Socket para saber
se ele ainda est� vivo. Se esse parametro n�o estiver presente no Registry,
ele assume como default 2 horas!
O problema � que mesmo fazendo esse esquema do KeepAliveTime, estou
desconfiado que alguns threads continuam travados para sempre no
in.readLine(), o que est� fazendo com que o meu servidor trave uma vez a
cada duas semanas por excesso de threads!
Algu�m j� passou por problema semelhante? Tem como for�ar um retorno de um
in.readLine() travado ? Se tiver acho ent�o que a solu��o poderia ser um
thread monitor para matar os threads que est�o travados a muito tempo.
[]'s
Sergio Oliveira Jr.
Sun Cerfied Java Programmer
Consultor Java
_________________________________________________________________________
Get Your Private, Free E-mail from MSN Hotmail at http://www.hotmail.com.
------------------------------ LISTA SOUJAVA ----------------------------
http://www.soujava.org.br - Sociedade de Usu�rios Java da Sucesu-SP
d�vidas mais comuns: http://www.soujava.org.br/faq.htm
regras da lista: http://www.soujava.org.br/regras.htm
para sair da lista: envie email para [EMAIL PROTECTED]
-------------------------------------------------------------------------