Я использую библиотеку 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 всякий раз, когда его достигают.