On Thu, Sep 17, 2009 at 10:27 AM, Kyle Tarplee <Kyle.Tarplee@numerica.us> wrote:
So it seems you can not have multiple outstanding async_read_some or async_write_some.  This makes since.

You might have multiple outstanding async requests. But in that case, you must write code to assure consistence. For async_read, the completion handlers may be called out of order, so you need to keep track about the order of the requests (you could, for example, give a sequence number for each async_read, and pass that number to the callback function). On the other hand, for async_write, since it is divided in many async_write_some, you must wait one operation complete before requesting another one. This avoids your data being interleaved.
Read the links I posted in earlier message for further information.

Kindly,
 

Now the thing that doesn't make since is that since a user could easily make such an error and the problem would be hard to track down (for instance it hasn't caused me a problem yet, just wasn't getting the warm fuzzy feeling about what I was doing) why does ASIO's socket not throw an error or behave more like the deadline_timer when one tries to create multiple async_ operations.  The deadline_timer kindly cancels the async_wait() when you call expires_fron_now().  It seems like the socket could cancel the previous read/write by calling it's callback with an error like operation_aborted.

Kyle

On Sep 16, 2009, at 2:40 PM, Matheus Araújo Aguiar wrote:


On Wed, Sep 16, 2009 at 4:39 PM, Igor R <boost.lists@gmail.com> wrote:
> I have a boost::asio::ip::tcp::socket that I want to write to.   Can I have multiple outstanding async_write() requests for a single socket?

asio::async_write() is a convenience function that calls
socket::async_write_some() multiple times - until all the data is
sent. This means that if you issue multiple asio::async_write's, the
data will be interleaved in most cases.
As for multiple async_write_some(), it will probably work on some
platforms... But note that async_write_some doesn't promise to send
all your data. So you can't "fire and forget" anyway.
_______________________________________________
Boost-users mailing list
Boost-users@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/boost-users


I had the same doubt, and asked the same think some weeks ago. Here's what helped me figuring out what happens:
 - http://archives.free.net.ph/message/20090821.085221.7ccd0f8a.pt-BR.html
 - http://www.jetbyte.com/portfolio-showarticle.asp?articleId=44&catId=1&subcatId=2

Regards,
--
Matheus Araújo Aguiar
Computer Scientist
matheus.pit@gmail.com
<ATT00001..txt>


_______________________________________________
Boost-users mailing list
Boost-users@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/boost-users



--
Matheus Araújo Aguiar
Computer Scientist
matheus.pit@gmail.com