hmm, unless you have 2+ CPU box, it will handle them always synchronously. IOCP only can help somehow masquerade it. :) Checklist for the very beginning - are your sockets initialized as OVERLAPPED? - are there more threads waiting in GetQueuetCompletionStatus? - what about the return codes from WSASend/FileWrite, are they correct? - is the problem while accepting the clients, or while communicating?