Per la scrittura impacchetto una struttura message_t in un unico buffer, che inizia con un header contenente la lunghezza del messaggio inviato. Il buffer è così costruito:
codice:
int64_t header;
len = strlen(&msg->type) + strlen(msg->buffer) +3;
da_inviare = (char*) malloc(len * sizeof(char) );
reall = realloc(da_inviare, sizeof(int64_t) );
if (reall == NULL){
errno = ENOMEM;
free(da_inviare);
return -1;
}
header = (int64_t) len;
/*Inserisco l'header nel messaggio*/
sprintf(da_inviare, "%" PRId64, header);
/*Compongo il messaggio, scrivendo solo i caratteri significativi sul buffer da inviare.*/
strcat(da_inviare, strcat(&msg->type,":"));
strncat(da_inviare, strcat(msg->buffer,"\n"), msg->length);
/*Scrivo il messaggio sulla socket*/
inviati = write(sc, &da_inviare, len);
free(da_inviare);
da_inviare = NULL;
Il messaggio è inviato correttamente ed è nella forma: "15Q:Messaggio\n". La read dovrebbe innanzitutto leggere quel "15", successivamente tutto il resto..