Praticamente catturo il segnale SIGTERM (15) chiudo la socket di ascolto, che non mi serve più, e invio a tutti i clients connessi un messaggio di chiusura... poi termino immediatamente il processo server con una exit(). Sbaglio?

E poi...
quando invio ai client questo messaggio di chiusura e il server termina...dall'altra parte i client effettuano una lettura dalla socket e qui ho altri dubbi... che succede? riescono a leggere lo stesso o riscontrano un errore?
La via 'corretta' sarebbe quella di chiudere tutti i socket, aspettare che tale operazione sia effettivamente conclusa e poi chiudere definitivamente il programma.

PS - occhio ai memory leaks, sempre in agguato in questo tipo di operazioni.