Можно ли как-нибудь увеличить адрес до boost::array
при передаче его в качестве аргумента?
Если быть точным, я предоставляю буфер -> boost::array<char, 4096> buffer
.
Этот буфер я передаю вызову socket::async_read_some
, чтобы заполнить его.Теперь, когда мой async_read_some
заканчивает, буфер не обязательно заполнен (как я могу проверить с помощью bytes_transferred
).Теперь, если это произойдет, я хочу снова вызвать async_read_some
, чтобы заполнить буфер дальше.
Теперь, если я передам буфер как обычно, он просто перезапишет содержимое в нем.Но я хочу, чтобы функции заполняли буфер в той позиции, где он завершился после первого вызова.К сожалению, я не могу просто передать увеличенный адрес buffer+bytes_transferred
, что было бы возможно с обычным буфером char*
.
Вот несколько (упрощенных) примеров кода того, что я хочу сделать - пожалуйста, предположите, что всебыл инициализирован и io_service запущен.
void myClass::startRead()
{
mySocket.async_read_some(boost::asio::buffer(buffer,4096)),
boost::bind(&myClass::handle_read, shared_from_this(),
boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred));
}
void myClass::handle_read(const boost::system::error_code& err ,size_t bytesTransferred)
{
if ( bytes_transferred < 4096 )
{
mySocket.async_read_some(/* address of buffer + bytes_transferred */
boost::bind(&myClass::handle_read, shared_from_this(),
boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred));
}
}
Я знаю, что этот пример будет работать только для одного вызова (тогда мне придется сохранить переданные байты в другой переменной), но я просто хотел высказать свою точку зренияясно.
Значит, у кого-нибудь есть помощь, как мне это сделать?