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