Los socket asincronos son un invento de windows. En los sockets normales cuando haces una llamada para recibir, por ejemplo, la llamada a la funcion no termina hasta que recibe los datos, esto puede cogelar tu aplicacion. Sin embargo en los socket asincronos windows se encarga de manejar todo esto impidiendo que la aplicacion quede esperando.
La verdad es que en la mayoria de los textos que lei no recomiendan usar sockets asincronos, es mejor usar threads y funciones como select para asegurarse de que una funcion no va a bloquear la aplicacion. Esto requiere mas trabajo, pero la cosas bien hechas siempre requieren mas trabajo
