le socket asincrone non mettono in pausa il programma in attesa di ricevere i dati
semplicemente se non c'è ne sono disponibili non ti ritornano nulla (se cosi si può dire)

praticamente si usa il select (il pool nn lo so usare) a cui si passano un X di parametri...3 array (o mappe) di sockets, il primo parametro sono le socket dalle quali si attende un evento di arrivo dei dati, il secondo parametri serve per vedere se le socket nella lista hanno il buffer per la scrittura pieno, mentre il terzo parametro serve a vedere se le socket hanno dato errore, ma non serve quasi mai xche il primo, quando salta una connessione, e vai per leggere il contenuto (chiudendo la connessione la socket ha un'evento per la lettura) ti ritorna un FALSE ^^

facendo cosi puoi gestire tutto in maniera asincrona