Как заставить boost :: asio :: async_read возвращаться при достижении завершающего символа - PullRequest
0 голосов
/ 18 марта 2011

Я использую библиотеку boost asio для чтения содержимого из сокета tcp. Мой код выглядит так

std::string completeBuffer="";
std::string TcpConnection::readMessage()
{
    LOG4CPLUS_DEBUG(logger, "Start Listener for Reading Message from Connection");
    boost::system::error_code error;
    boost::asio::async_read(socket, boost::asio::buffer(buffer),
        boost::bind(&TcpConnection::handleRead, this, buffer, boost::asio::placeholders::error));
    return buffer.data();
}

void TcpConnection::handleRead(boost::array<char, TcpConnection::BUFFER_SIZE> buf, const boost::system::error_code& error)
{
    if(!error)
    {
       LOG4CPLUS_INFO(logger, "READ Message " << buf.data());
       completeBuffer.append(buf.data());
       buf.assign(0);
       readMessage();
    }

}

Теперь я звоню из другого класса readMessage(). всякий раз, когда достигается BUFFER_SIZE, вызывается handleRead и содержимое добавляется.

теперь вопрос в том, что BUFFER_SIZE равен 50, а весь размер сообщения равен 75, handleRead вызывается только один раз, и буфер ожидает заполнения для вызова handleRead во второй раз. Есть ли способ установить символ или строку EOM для возврата asio всякий раз, когда его достигают.

1 Ответ

5 голосов
/ 18 марта 2011

Нашел ответ async_read_until

...