MFC supplies several socket classes, but, from my experience, they are just unusable for this purpose. Facing the challenge, I wrote my own thin wrapper classes around socket API, together with template for server, and it was surprisingly simple. The complete example project is in file RawSocketServerExample. Uses pure virtual helper class CWizMultiThreadedWorker. Serves regular situation when requests come from many clients to the server.
Dispatcher starts to serve the client in the separate thread and continues to wait for requests.
The number of parallel threads is limited for effectiveness. CPP and ThreadDispatcher. CPP and RawSocket. Class CWizRawSocketListener derived from CWizMultiThreadedWorker to work with CWizThreadDispatcher and it uses CWizSyncSocket. CPP and RawSocketServerWorker.