Salve a tutti.
Sto provando a realizzare un client-server echo in C. Echo nel senso che il server risponde con la stessa cosa che gli invia il client. E fin qui, nessun problema. Nel momento in cui provo a modificarlo per far sì che il server, anzichè rispondere con lo stesso messaggio, risponda con un messaggio standard, del tipo "Messaggio ricevuto.", non riesco più a farlo funzionare. Dove sbaglio?

In breve, la funzione del server in cui ricevo la stringa e rispondo con un messaggio standard è questa:
codice:
void server_echo(int sockfd){
    ssize_t        n;
    char        line[MAXLINE];
    char        ack[] = "Message Received";
    
    for( ; ; ){
        if( (n = reti_readline(sockfd, line, MAXLINE)) == 0)
            return; // Connessione chiusa dal client
        // Se inserisco line ed n al posto di ack e strlen(ack) funziona tutto correttamente
        reti_writen(sockfd, ack, strlen(ack)); 
    }
}
Analogamente, la funzione del client è questa:
codice:
void client_echo(FILE *fp, int sockfd){
    char sendline[MAXLINE], recvline[MAXLINE];
    while(fgets(sendline, MAXLINE, fp) != NULL){
        reti_writen(sockfd, sendline, strlen(sendline));
        if(reti_readline(sockfd, recvline, MAXLINE) == 0){
            printf("%s: server terminated prematurely", __FILE__);
            exit(1);
        }
        fputs(recvline, stdout);
    }
}
La funzione reti_readline prende in input un socket descriptor e un vettore di caratteri di lunghezza MAXLINE (256). Termina quando incontra \n. La funzione reti_writen scrive n byte sul descrittore.