Ciao a tutti ragazzi, sto programmando un server che riceve su una socket singole richieste da molteplici client. Ogni connessione deve essere gestita da un thread. Ad un certo punto del codice, il server fa una listen() ed entra in un ciclo che non fa altro che accettare le connessioni, invocare un thread per soddisfare tale richiesta e incrementare una variabile che tiene traccia di quanti thread sono stati creati. Le risposte vengono scritte direttamente sulla socket dai vari thread. A questo punto mi sono bloccato: le specifiche dicono che il server termina quando riceve un segnale di SIGINT o SIGTERM, alla ricezione bisogna attendere che tutti i thread terminino, scrivere su un file di log e chiudere la socket. Il mio dubbio risiede qui: come posso uscire dal ciclo infinito alla ricezione di tale segnale? Dal punto di vista del codice sono a questo punto:
Devo sicuramente cambiare la condizione del while, ma con cosa? Vi ringrazio in anticipo!codice:...... listen(socket, SOMAXCONN); while(1){ if( acp = accept(socket, NULL, NULL) != -1 ){ //worker è la funzione che dovrà eseguire il thread. pthread_create(&t_id, NULL, worker, (void *) acp); pthread_detach(t_id); //mutua esclusione per l'accesso alla variabile condivisa w che tiene traccia dei thread creati pthread_mutex_lock(&w_mux); w++; } else continue; }