potresti ad esempio usare una lista globale di tutti i socket creati.
Quindi Il thread Listen farà la accept e aggiunge socket alla lista e lancierà nthread con parametro nuovo socket .
Appena sarà avviato questo nuovo thread andrà in recv e gestirà i dati in arrivo e basta.
Ora ad esempio nel main tu avrai accesso alla lista dei socket e quindi potrai effettuare una send a qualsiasi socket presente nella lista.
Anche se un thread è in recv quindi bloccato in attesa di dati, tu puoi usare lo stesso il socket da un'altro thread(esempio il main) per effettuare una send.Non ho ben Capito: "dal main puoi inviare qualsiasi messaggio a qualsiasi socket anche se in recv."