Ok, è definitivamente risolta la cosa. In pratica c'era una read() in più nel client e c'ho implicava che il Client si aspettasse un messaggio che mai arrivava. Adesso ho testato il tutto e funziona.
Ho impiegato un giorno e mezzo per capire, questa lezione non la scorderò mai più: ad ogni n read() corrispondo n write(), e viceversa!