ahah!!
c´est un peu bizarre les fifos.
lorsque tu as un fifo ouvert en lecture, le fifo est dit "terminé" (EOF) quand il n´y a plus de processus qui ont ouvert le fifo en ecriture.
mais ton processus ´serveur´ ouvre le fichier en écriture... donc, il y a un processus qui a le fichier ouvert en écriture, donc le système n´envoye pas EOF dans le fifo...
En modifiant ton code source de serveur.c et en y changeant les droit d´ouverture sur le fifo de "a+" a "r", tu obtiens l´effet escompté.
Il faut faire attention aux droits que l´on demande sur les fichiers. Il ne faut pas en demander trop... 