I would recommend against using the Reachability APIs. Network preflight checks will lead to endless edge cases and race conditions similar to what you are pointing out here.
My recommendation for HTTP requests would be to try the request and if the device is offline then URLSession will immediately fail the request. If URLSession is not immediately failing then put a client timeout on the URLRequest.
If you are using a low level networking API like NWConnection then use the stateUpdateHandler to evaluate the NWConnection.State. If the NWConnection is already setup and you are seeing issues during a send() call, check the NWConnection.State of the connection before sending data if you absolutely need to.
Matt Eaton
DTS Engineering, CoreOS
meaton3@apple.com