Ho un problema con un thread:
devo costruire un programma che lanci un demone e poi termini: FATTO.
il mio problema è che quando questo demone poi crea un thread, termina anche se non dovrebbe.
Questo è il codice del demone:
void chat_server()
{
pthread_t main_t;
int numThreadAttivi = 0; //Indica quanti thread worker sono stati creati.
int creation = 0;
go = 1;
creation = pthread_create(&main_t,NULL,main_func,(void*)NULL);
printf("Creation = %d\n",creation);
while(go)
{
signal(SIGTERM,signal_handler);
signal(SIGINT,signal_handler);
fprintf(stdout,"chat_server sta girando\n");
sleep(5);
}
pthread_join(main_t,NULL);
}
E questo è il codice della funzione eseguita dal thread:
void* main_func(void* arg)
{
int master_socket;
int sock_apt; //Accepter
char buf[N]; //Buffer del socket
char* _ok;
struct sockaddr_un tmp;
//Apre Socket Master
tmp = init(tmp,"./my_socket");
master_socket = crea_socket(tmp);
while(go)
{
//Si mette in attesa di connessioni
printf("sto ascoltando");
listen(master_socket,SOMAXCONN);
//Accetta la connessione e risponde al client
sock_apt = accept(master_socket,NULL,0);
read(sock_apt,buf,N);
strcpy(_ok,"Connessione Ricevuta");
int dim = strlen(_ok);
write(sock_apt,_ok,dim+1);
printf("Il server ha rivecuto il messaggio: %s\n", buf);
}
return NULL;
}
Qualcuno potrebbe aiutarmi a capire perché se io commento la pthread_create() funziona tutto senza problemi mentre altrimenti il demone termina?
Grazie infinite