
Hello, jason, from asio doc: async_read will invoke handler one condition is true: 1. the supplied buffers are full. 2. an error occurred. so if there is no socket error, async_read will return len1 bytes. My question is, can we make simultaneous async_read calls on one socket, will they interfere each other? Thanks! 2014-08-08 10:17 GMT+08:00 Jason Roehm <jasonr@3db-labs.com>:
On 08/07/2014 09:54 PM, bbxiong wrote:
Hello, all,
If i write some code like this: boost::asio::async_read(socket_, bosot::asio::buffer(buffer1_.data(), len1, handler1); boost::asio::async_read(socket_, boost::asio::buffer(buffer2_.data(), len2, handler2);
Will asio guarantee len1 bytes received by the first async_read, then schedule async_read2?
or the result is undefined(like several bytes filled into buffer1, then next several bytes into buffer, then next several bytes into buffer1)?
I don't believe you're guaranteed that you will get `len1` bytes from the first read; it could be shorter. If you want to ensure that you get exactly that size in the first read, you should use the `transfer_exactly` completion condition:
http://www.boost.org/doc/libs/1_56_0/doc/html/boost_asio/ reference/transfer_exactly.html
Jason
_______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users