Grazie per l' Edit, nel mio caso SOMAXCONN è il numero massimo di connessioni, la variabile w mi serve per sapere quanti thread non sono ancora terminati nel momento in cui il server riceve il segnale! 
Edit: Il codice ora si presenta così:
codice:
while(run){
signal(SIGINT, fun_sig);
signal(SIGTERM, fun_sig);
if( acp = accept(socket, NULL, NULL)!= -1 ){
pthread_create(&t_id, NULL, worker, (void *) acp);
pthread_detach(t_id);
pthread_mutex_lock(&w_mux);
w++;
}
else continue;
}
fun_sig invece:
codice:
void fun_sig(){
run = 0;
}
Run è ovviamente una variabile globale! Può andar bene così?