0
我使用boost asio庫從tcp套接字讀取內容。我的代碼看起來像這樣如何獲得boost :: asio :: async_read當到達終止字符時返回
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,這是正確的。 – Ralf 2011-03-18 11:38:01
+1另一個upvote – 2011-03-18 14:09:26