boost::asio::streambuf problem

Hello, "Long time listener, first time caller..." I'm struggling with the "boost::asio::streambuf," and the "boost::asio::async_read_until." I'm trying to wait on the async_read_until, which I can do after the first message is sent, but subsequent messages received cause the streambuf to continuously grow. I am trying to use the streambuf via the .data() member. void TAsioSession::Start() { boost::asio::async_read_until(m_Socket, m_szAsioData, boost::regex("\n"), boost::bind(&TAsioSession::HandleRead, this, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred)); } void TAsioSession::HandleRead(const boost::system::error_code& error, size_t bytes_transferred) { if(!error) { boost::asio::streambuf::const_buffers_type bufs = m_szAsioData.data(); std::string szBuffer( boost::asio::buffers_begin(bufs), boost::asio::buffers_begin(bufs) + bytes_transferred); LP_ICPACKET lpICPacket = reinterpret_cast<LP_ICPACKET>(const_cast<char*>(szBuffer.c_str())); // reset streambuf for reading (how?) . . . Start(); } Once I grab the data that is in the buffer, I want to reset the streambuf and go back to "async_read_until," and wait for another message to come in. I try to do the following to reset the streambuf pointers... // set the current put/get ptrs of streambuf to beginning of stream m_szAsioData.commit(-m_szAsioData.size()); m_szAsioData.consume(-m_szAsioData.size()); // clear the streambuff char szClear[512]; ZeroMemory(szClear, 512); m_szAsioData.sputn(szClear, sizeof(szClear)); m_szAsioData.sgetn(szClear, sizeof(szClear)); // set the current ptrs of streambuf back to beginning m_szAsioData.commit(-m_szAsioData.size()); m_szAsioData.consume(-m_szAsioData.size()); but the new message isn't at the head of the buffer, it is coming in at position 512 of the streambuf, and the streambuf grows. Any help would be appreciated. Thanks, Rod

I actually went back to the istream approach and I still can't get that to work, after I pull the data out of the streambuf via the istream, "getline," and return to async_read_until, it immediately reads again and is grabbing garbage. Also, I can still see the previous data in the streambuf, and the streambuf has grown. On Sat, Oct 18, 2008 at 2:19 PM, rod haxton <rehaxton@gmail.com> wrote:
Hello,
"Long time listener, first time caller..."
I'm struggling with the "boost::asio::streambuf," and the "boost::asio::async_read_until."
I'm trying to wait on the async_read_until, which I can do after the first message is sent, but subsequent messages received cause the streambuf to continuously grow. I am trying to use the streambuf via the .data() member.
void TAsioSession::Start() { boost::asio::async_read_until(m_Socket, m_szAsioData, boost::regex("\n"), boost::bind(&TAsioSession::HandleRead, this, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred)); }
void TAsioSession::HandleRead(const boost::system::error_code& error, size_t bytes_transferred) { if(!error) { boost::asio::streambuf::const_buffers_type bufs = m_szAsioData.data();
std::string szBuffer( boost::asio::buffers_begin(bufs), boost::asio::buffers_begin(bufs) + bytes_transferred);
LP_ICPACKET lpICPacket = reinterpret_cast<LP_ICPACKET>(const_cast<char*>(szBuffer.c_str()));
// reset streambuf for reading (how?) . . .
Start(); }
Once I grab the data that is in the buffer, I want to reset the streambuf and go back to "async_read_until," and wait for another message to come in.
I try to do the following to reset the streambuf pointers...
// set the current put/get ptrs of streambuf to beginning of stream m_szAsioData.commit(-m_szAsioData.size()); m_szAsioData.consume(-m_szAsioData.size());
// clear the streambuff char szClear[512]; ZeroMemory(szClear, 512); m_szAsioData.sputn(szClear, sizeof(szClear)); m_szAsioData.sgetn(szClear, sizeof(szClear));
// set the current ptrs of streambuf back to beginning m_szAsioData.commit(-m_szAsioData.size()); m_szAsioData.consume(-m_szAsioData.size());
but the new message isn't at the head of the buffer, it is coming in at position 512 of the streambuf, and the streambuf grows.
Any help would be appreciated.
Thanks, Rod
participants (1)
-
rod haxton