Se hai quel problema, evidentemente qualcosa non va ...

Quando dici

se scrivo printf("%d", msg->length), ottengo il valore esatto;
se scrivo if(msg->length == 0)

intendi proprio una riga sotto l'altra? O la printf la fai in una funzione e la if in un'altra?

Mostra il codice esatto con cui visualizzi e controlli e tutto il codice della ricezione che hai scritto ...