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ì?