Looking at the documentation it looks like the TCP socket object is not thread-safe. So I cannot issue async_read from one thread and async_write concurrently from another thread? Also I would guess it applies to boost::asio::write() as well?
Can I issue write() - synchronous, while I do async_read from another thread? If that is not safe, then only way is probably to get the socket native handle and use synchronous linux mechanisms to achieve concurrent read and writes. I have an application where the reads and writes are actually independent.