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 ?