This is adapted from a recent email conversation I had about network I/O models for a GUI client running on .NET. I ended up on a tangent, covering APIs available for 3 major platforms. Since all this info was gathered in one place, I figured I might as well post it :) There's also some discussion about when blocking and non-blocking models are appropriate, but I don't actually draw any conclusions. Hopefully there's enough background here for someone to make the call on their own. Let's start by...