Мне кажется, проблема в том, что вы передаете константный буфер в async_read
вместо изменяемого буфера.В блоке, заканчивающемся строкой 50, boost::asio::buffer(_header)
возвращает постоянный буфер.Вы должны сделать что-то вроде boost::asio::async_read(s, boost::asio::buffer(data, size), handler)
, потому что boost::asio::buffer(data, size)
создает изменяемый буфер.
Вместо использования std::string
s для _header и _data, вам, вероятно, нужно использовать массивы char, такие как:
char * _data;
boost :: asio :: buffer (_data, strlen (_data));
См. Ссылки на буфер и async_read.