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:
inoltre per gestire la coda dei client utilizzo un semaforo my_sem inizializzato con: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 ....... }
in modo da poter accettare 3 clientcodice:sem_init(&my_sem,0,3);
Quando viene rilevato che un client chiude la connessione, chiudo il socket relativo al client e effettuo una
per incrementare il semaforo e sbloccare eventuali client in attesa.codice:sem_post(&my_sem);
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

Rispondi quotando
