Ciao a tutti, ho un problema con il mio server multithread. Il server esegue un ciclo infinito di accettazioni di connessioni su una data socket, il ciclo termina (e dunque anche il server) quando viene inviato un segnale SIGINT. Il server deve prima far terminare tutti i thread ancora attivi, e poi terminare eliminando la socket e quant'altro. Ho però un problema: se arrivano ulteriori richieste di connessioni, come le gestisco? Non posso ignorarle, ma non posso neppure accettarle nella funzione di gestione dei segnali. La accept, essendo bloccante, se eseguita senza richieste di connessioni, mi blocca il server non facendolo terminare. Come potrei risolvere? Al momento il ciclo prevede:
Lo script che testa il server prevede l'avvio di un tot di client, quello del server, uno sleep di 5 secondi prima dell'invio di killall. Nella maniera sopra riportata, non tutti i client comunicano con il server (che è "rallentato" dalla join), e arrivano ulteriori connessioni durante la fase di uscita, trovando la socket già eliminata. Avevo pensato di inserire tutti i thread id in un array e invocare la join su tutti i thread nella funzione di gestione del segnale, ma...è safe? E' corretto farlo? Altrimenti come potrei procedere?codice:while(1) if(accept() ){ tid = pthread_create(); pthread_join(tid); }