Il 22/11/2012 19:38, Gonzalo Garramuno ha scritto:
Do you expect std::getline to give you more than 1 line? No, sorry I was not clear. I expect the streambuf or read_until to have some way of telling me there's more lines to read. With that piece of code, the streambuf swallows multiple lines, but getline only gets to
On 21/11/12 14:56, Igor R wrote: the first line. Only when read_until is run again, the other lines appear. I need to poll? the socket for more data, but not sure how that is done in asio.
This is not the way read_until works. The problem is that it can have read more data thant what is until the "\n", but it only committed reply_length bytes. Thus you should do something like the following typedef boost::asio::streambuf::const_buffers_type buffer_type; typedef boost::asio::buffers_iterator<buffer_type> iterator; boost::asio::streambuf buf; while( 1 ) { boost::system::error_code ec; size_t reply_length = boost::asio::read_until( socket_, buf, '\n',ec); if (ec) { // probably connection closed, do something smart // about it } std::string line; buffer_type input buf.data(); std::copy(iterator::begin(input),iterator::end(input), std::back_inserter(line)); buf.consume(reply_length); } -- Leo Cacciari Aliae nationes servitutem pati possunt populi romani est propria libertas