il link msdn ke hai posto utilizza i socket asincroni, personalmente li sconsiglio, se proprio si vuole creare un server asincrono usa i socket basati sugli eventi SocketAsyncEventArgs molto + performanti e riutilizzabili in modo da ocupare meno risorse.
L'approccio che ti ho scritto io è più semplice