
Hi, I am using boost asio in a project. My program has a TCP protocol which reads a fixed size message header, followed by a variable-sized message body. It is possible to have a message with a 0-byte body, and it is possible that no messages are received for some time. I have an issue when attempting to async_read() a 0-byte body with the buffered_read_stream, detailed here: (1) My program reads a fixed-sized header (2) After this succeeds, my program issues an async read for 0 bytes, for the message body (3) buffered_read_stream sees that storage_ is empty, so it calls async_fill(), to fill it (4) no more messages arrive for some time, so there is no data available to fill (5) BUG -> My program's 0-byte read timer expires, rather than the read() succeeding and calling my handler immediately If I use the boost::asio::tcp::socket instead of the buffered_read_stream, the 0-byte read occurs immediately, and does not time out. I believe the read() with the buffered_read_stream is getting 'blocked' in async_fill(), rather than succeeding immediately. Do you think the buffered_read_stream should have special cases for 0 byte reads to cover this case, or do you think client code should avoid issuing 0 byte reads? Thanks, Brad