boost :: asio :: async_read_until Изменить максимальный размер, который он может прочитать - PullRequest
0 голосов
/ 02 апреля 2020

Я хочу прочитать сообщение, отправить через сокет с размером = 1257. Код для этого:

Это ActiveSocketClientConnection.h

class ActiveSocketClientConnection : public boost::enable_shared_from_this<ActiveSocketClientConnection>{
private:

    boost::shared_ptr<tcp::socket> socket_;
    boost::asio::streambuf data_;

    ...

public:

    ...
}

Это ActiveSocketClientConnection. cpp

void ActiveSocketClientConnection::handleConnect(const boost::system::error_code& error){

    std::string sETX;

    boost::asio::async_read_until(
        *socket_.get(),
        data_, 
        ">",
        boost::bind(&ActiveSocketClientConnection::handleReadBody,
            this,
            boost::asio::placeholders::error,
            boost::asio::placeholders::bytes_transferred
        )
   );

   ...

}

void ActiveSocketClientConnection::handleReadBody(  boost::system::error_code error, std::size_t bytes_read){
    size_t t =  data_.size();

    unsigned char* output = (unsigned char*)malloc(t);
    memcpy(output, boost::asio::buffer_cast<const void*>(data_.data()), t);

    data_.consume(t);

    ...
}

Переменная data_ хранит только 512 (но размер завершенного сообщения 1257), поэтому сообщение, которое было повторно отправлено, является неполным.

Как я могу восстановить сообщение полностью? Я могу изменить размер, который я могу получить?

Транки.

...