Что-то удивляет меня в этом коде.Ваш заголовок на самом деле строка?Если это структура, для чего-то подобного вы должны заменить strlen на sizeof.Вызов strlen для строки, не заканчивающейся нулями, может вызвать сбои.
Второе, что меня удивляет, это то, что при чтении полученных данных вы должны где-то скопировать заголовок.Если он не используется, зачем отправлять его по проводам?
РЕДАКТИРОВАТЬ: ОК, заголовок представляет собой строку заголовка типа http.Оттуда не должно быть никаких проблем, и это действительно не нужно анализировать, если вы просто тестируете.
И вы должны переместить данные в то место, где они вам действительно нужны, переместив их в началоиз буфера не выглядит как правильно делать.
Если проблема возникает из-за выравнивания, она исчезнет, если вы скопируете данные в некоторую переменную реального целевого типа на уровне байтов перед использованием.
Существует другое решение: выделить свой буферс malloc и поместите структуру данных, которую вы хотите в начале.Тогда вы должны быть в состоянии разыграть его.Адреса, возвращаемые malloc, совместимы с любым типом.
Также следует помнить, что если вы работали с C ++, приведение к нетривиальному классу вряд ли сработает (во-первых, vtables может получить неправильные адресаи есть другие проблемы).
Другим возможным источником проблемы является способ получения data_length.Это должно быть количество байтов.Вы уверены, что это не ряд предметов?Чтобы быть уверенным, нам нужен некоторый намек на код вызова.