The documentation states that tcp::socket is not thread safe as a shared object.
I use the widely accepted SGI STL definition of thread safety, which is:
The SGI implementation of STL is thread-safe only in the sense that simultaneous accesses to distinct containers are safe, and simultaneous read accesses to shared containers are safe. If multiple threads access a single container, and at least one thread may potentially write, then the user is responsible for ensuring mutual exclusion between the threads during the container accesses.
The key word being simultaneous. So, using multiple threads to access a shared object is fine as long as that access is not concurrent. As an aside, this only matters if one or more of the threads is writing to the shared object.
The state of the socket object is in the process' memory space, which is shared between threads and therefore cannot be inconsistent.
Hope this answers your question!