Ho scritto due software che si scambiano oggetti tramite socket, tutto funziona tranne l'accorgersi di uno dei software che l'altro si è arrestato.
Infatti se termino un'applicazione con ctrl+c mi aspetto che l'altro si accorga che il socket non è più in essere, invece non è così.
Per controllare che tutto sia ancora funzionante ho scritto questo metodo:
codice:
public boolean isAttivo(){
boolean esito = true;
if ( !isAttivo )
esito = false;
if ( !socket.isConnected() ||
socket.isClosed() ||
!socket.isBound() ||
socket.isInputShutdown() ||
socket.isOutputShutdown() ) {
if ( debug >1 )
logger.warn("Il server non e' attivo");
esito = false;
} else
if ( debug >4 )
logger.warn("Il socket e' attivo");
return esito;
}
che viene utilizzato da un apposito thread ogni minuto.
Com'è possibile che l'applicazione non si accorga che il thread non è più funzionante ?