I am currently writing a TCP I/O facility that uses Boost.Asio as the underlying socket API, and I've noticed that Boost.Asio seems to lack documentation on which specific Boost error codes/conditions can result from each individual operation (e.g. function/method call or asynchronous operation). All that I've been able to find is the error code API and some informal error code lists, none of which correlate specific codes to specific operations.
This apparent lack of documentation is frustrating, because it's difficult to write robust code when you don't know the possible failure modes. It's impossible to even give examples, since I'm not even confident of which issues could arise from which operations due to the lack of documentation.
In comparison, the POSIX socket API is pretty decent at documenting failure modes. In particular, it lists errno and return values that can be generated by each function call.
Does this Boost.Asio documentation exist somewhere, and I'm just not seeing it? Or am I supposed to just guess at, reverse engineer, or collect empirical data on the failure modes of various parts of the Boost.Asio API in order to be able to write robust code that uses it?