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] 
-------------------------------------------------------------------------

Responder a