La write prende in ingresso un void* , dunque se buffer è una variabile di tipo char, è necessario che alla write sia passata come &buffer. "msg" è una struttura da me definita, dichiarata come

codice:
typedef struct {
  /** tipo del messaggio */
    char type;           
  /** lunghezza messaggio in byte */
    unsigned int length; 
  /** buffer messaggio */
    char buffer[MAXBUF];        
} message_t;
e passata alla funzione in questione come puntatore, dunque l'uso di &msg è essenziale.

Resta il fatto che la scrittura viene effettuata correttamente e senza errori, è in lettura che sorgono i problemi, come dicevo prima, non riesco a leggere correttamente l'intero contenuto nella prima parte del buffer.