Ciao a tutti ragazzi, ho un problema in fase di chiusura del mio server. In pratica questi deve terminare "gentilmente" quando riceve un segnale di SIGINT o SIGTERM. Ho quindi realizzato una semplice funzione che, alla ricezione dei sopracitati segnali, dovrebbe terminare il server registrando qualche informazione su file e aggiornando qualche variabile.
Testando il server, ho notato che non si sospende mai, sebbene il "return" della funzione sia correttamente eseguito. Posto un po di pseudo-codice per farvi capire:

Server:
codice:
signal(SIGINT, signal); 
signal(SIGTERM, signal); 
//Inizializzazione, creazione socket => Tutto perfettamente testato e funzionante 
//Ciclo di accettazioni connessioni da parte dei client
while(run){
   //accetta eventuali connessioni pendenti dei client 
  if(accept() != -1){  
      //crea un thread per ogni connessione che gestisce le richieste
       }
  else continue; //passa alla successiva richiesta di connessione
}

//Scrive su file e termina 
return EXIT_SUCCESS;
Segnali:
codice:
void signal (int sig){
 run = 0; 
}
run è una variabile di tipo volatile sig_atomic_t.

Server e client sono invocati mediante uno script, l'istruzione che determina il loop è la seguente:
killall -w server

L'unica spiegazione è che, avendo specificato di attendere la terminazione effettiva con l'opzione -w, il server non si chiuda, ma inserendo dei "printf" per verificare dove il codice si blocca, arriva senza errori al return.
Qualche idea? Grazie in anticipo!