Per usare la sequenza \r\n devi usae la recv e la send.
togli \r\n se vuoi usare write e read.
dato che trasformi la vaiabile double in una stringa tramite una delle funzioni printf,quando ricevi il messaggio dovrai usare printf("%s",buffer);
se vuoi tornarlo a convertire dovrai prima togliere i caratteri superflui che hai aggiunto e poi usare l'atof.
Uno invia 8 byte, ma in ricezione gli possono arrivare 8, 4+4, 5+3, o qualunque altra suddivisione l'infrastruttura di rete decida di utilizzare.
Questo è vero ma a livello piu basso.Il protocollo tcp ci garantisce che il pacchetto arrivi esattamente come è stato spedito.(c'è una nota sulla dimensione ma lasciamo stare)
Bisognerebbe comunque mettere un controllo che testi che siano stati effettivamente letti tutti i byte.
miavar=citta_cli[codice].lat;
if ( write(sockfd, &miavar, sizeof(double)) <4)
{
perror("write error");
exit(-1);
}
if (read(connfd, &miavar ,sizeof(double))<4)
{
perror("read error");
exit(-1);
}
bisognerebbe vedere anche come hai impostato il socket comunque prova il codice cosi e vedi come ricevi.