If your starting out, I'd just use the MFC CSocket class. Get a simple client and server working with CSocket and then get complicated (i.e. asychronous) later. Override the OnReceive(...) message. When data shows up, OnReceive will get called, so then you call Receive(...) to receive the data. If there is more data in the buffer, OnReceive will get called again for you. I don't know if the socket calls are blocking or not, but CSocket works synchronously rather than asynchronously, which will save you a lot of headaches. In my experience, the CSocket Connect() call is annoying when it blocks, but the Receive() and Send() calls are barely noticable when you call them. Remember that we're going at network speed, dude, and we know that the data has already arrived via TCP/IP. All you have to do is read it out of memory. "Harland Pepper, would you stop naming nuts" - Harland Pepper