Ho detto in teoria, non ho detto che dev'essere così.
la read restituisce il numero di caratteri letti per ogni singola lettura e non è detto che alla fine la sommatoria dei vari n sia == k.
Devi aggiungere un'altra variabile.
codice:int idx=0; for (k=0;k< add_mess->data_length; k=k+n){ n = read(newsockfd,&add_mess->dato[k],(unsigned long int)add_mess->data_length - k); idx+=n; //printf("k---> %d--->%d\n",k,n); if (n < 0) error("ERROR reading from socket--add"); if (n==0) break; } add_mess->dato[idx]=0;