Ti ho stampato la seguenza di accept del server e di connect dei client, guarda tu stesso:

codice:
Client: connessione 4
Server -accept : 5
Client: connessione 4
Client: connessione 4
Server -accept : 6
Client: connessione 4
Server -accept : 7
Server -accept : 8
Client: connessione 4
Server -accept : 9
Server -accept : 13
Client: connessione 4
Client: connessione 5
Server -accept : 5
Client: connessione 5
Client: connessione 5
Server -accept : 6
Client: connessione 5
Client: connessione 5
Server -accept : 7
Client: connessione 6
Server -accept : 5
Server -accept : 8
Server -accept : 9
Client: connessione 6
Server -accept : 6
Client: connessione 6
Client: connessione 6
Client: connessione 6
Server -accept : 7
Server -accept : 8
Server -accept : 9
Client: connessione 5
Server -accept : 10
Server -accept : 11
Client: connessione 4
Client: connessione 5
Server -accept : 11
Client: connessione 6
Client: connessione 6
Server -accept : 10
Server -accept : 11
Questi sono 7 clienti che si connettono a 3 server, come puoi vedere 4, 5, 6 sono ciò che connect ritorna, e ritona lo stesso valore per tutti i clienti. Invece il server ha come ritorno da accept un range di valori più ampio, ma anche qui si ripetono...E' sopratutto per questo che utilizzo i semafori...

Se poi ti può tornare utile ti posso mostrare anche la sequenza che non utilizza i semafori per la scrittura, vedrai che la maggior parte delle comunicazioni non avviene...