如何在到达终止字符时获取boost :: asio :: async_read

时间:2011-03-18 10:30:45

标签: c++ boost tcp boost-asio

我正在使用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第二次呼吁。 有没有办法为asio设置EOM字符或字符串,以便在到达时返回。

1 个答案:

答案 0 :(得分:5)

找到答案async_read_until