Nonblocking/overlapping/asynchrone Socket-Operationen sind die Lösung. Wie genau das mit der
WinAPI geht, habe ich noch nicht ganz durchschaut
*; aber die Socket-Doku macht deutlich dass das unterstützt wird.
Im Prinzip würde man immer das in einen Puffer lesen was gerade da ist und dann später noch mal nachgucken (Busy Waiting, vielleicht kann man sich das auch irgendwie signalisieren lassen).
*
zu viel Arbeit nur für den Spaß, wenn man sonst mit *nix arbeitet