For non-blocking calls you need to use
instead. Blocking is explained here:
I would advise to use
and blocking calls with threads. Do all networking in separate threads. I think asynchronous APIs were offered when threads were not a commonplace and presently does not make a lot of sense. Threaded solutions are more straightforward, and the role of asynchronous callbacks, etc are played by thread communication primitives which are more explicit and give you more control.