Ciao a tutti

Ho questo problema a cui non trovo soluzione!

Io ho una coda di 2 elementi (socket) che una volta piena mi prende i due socket, azzera la coda e avvia una procedura per farli comunicare.
Il problema è che non so bene come gestirla perchè l'idea che mi è venuta ha problemi quando una volta che è terminata la procedura creata con la fork mi ritorna e mi crea inconsistenza nella coda.

Ecco il codice:
codice:
void waitPlayer(){
	
	int nClient = 0;
	
	int q[2];
	
	fprintf(stderr, "Inizio ascolto.\n");
	
	while(true){
		if(nClient == 2){
			nClient = 0;
			sPlayer1 = q[0];
			sPlayer2 = q[1];
			//Fork avvio gioco
			int pid_partita;
			switch (pid_partita = fork()) {
				case -1:
					perror("Errore nell'esecuzione della fork.");
					exit(1);
				case 0:
					controlPlayers(sPlayer1,sPlayer2);
					break;
			}
			
		}
		/* gestione delle connessioni dei clienti */
		int player_len = sizeof(player);
		if ((q[nClient] = accept(sock, (struct sockaddr *)&player, &player_len)) < 0) {
			perror("accepting connection");
			exit(3);
		}
		nClient++;
		fprintf(stderr, "Nuovo Player Connesso C:%d.\n",nClient);
	}
}
Grazie mille dell'attenzione