Ciao ragazzi ho un problema con un server in C con i socket. Il server deve essere concorrente e può accettare connessioni da massimo 3 client contemporaneamente, dopodicchè si blocca fino a quando un client termina. Per implementare il server utilizzo quindi una fork in questo modo:
codice:
sem_wait(&my_sem);
printf ("In attesa di una connessione al socket...\n");
new_s = accept( s, (struct sockaddr*) &caddr, &addrlen);
if ( fork() ) {
// processo padre termina il nuovo socket
//ritorna in attesa di un nuovo client
close (new_s);
}
else {
close(s);
//servo il client .......
}
inoltre per gestire la coda dei client utilizzo un semaforo my_sem inizializzato con:
codice:
sem_init(&my_sem,0,3);
in modo da poter accettare 3 client
Quando viene rilevato che un client chiude la connessione, chiudo il socket relativo al client e effettuo una
codice:
sem_post(&my_sem);
per incrementare il semaforo e sbloccare eventuali client in attesa.
Il problema sta nel fatto che avendo fatto FORK il processo che attende nuove connessioni e il processo che serve il client sono distinti e quindi suppongo anche le variabili....quindi anche facendo sem_post() non vado realmente a sbloccare il semaforo my_sem.
Spero di essermi spiegato bene...il discorso è un pò complesso...spero qualcuno abbia qualche idea e riesca a darmi una mano....grazie