No. You quoted the relevant part of the specification yourself.
Indeed, a read may fail at any time for any number of reasons. Testing for "will read succeed", followed by a read
, merely introduces a race condition - the situation may change in between the two calls.
You need to write your application in such a way that a failed read is handled appropriately. If you do that, you won't usually need to care about testing beforehand, and can simply use select
to determine when data is (probably) available.