Вы размещаете массив в стеке внутри вашей функции recvmsg
.Возврат указателя на эту память в какой-то момент приведет к неопределенному поведению, если он будет разыменован, поскольку память будет очищена при выходе из функции.
Если вы хотите вернуть указатель на память, вам необходимо выделитьэто динамически, используя malloc
.