I believe it is because the composed operation async_write. async_write is composed of multiple socket::async_write_some asynchronously. Strand is helpful to serialize those operations. Chris Kohlhoff, the author of asio, talks about it briefly in his boostcon talk at around 1:17.