TC>1) может ли WSARecv вернуть ошибку, если запрос не может быть удовлетворен немедленно ( данных еще нет )? TC>2) можно как нибудь организовать ожидание завершения запроса WSARecv?
Да и да. Базовые вопросы, хорошо описаны в документации, почитай лучше там.
TC>3) что будет, если вызвать 2 раза подряд WSARecv и в оба вызова сунуть один и тот же буфер и одну и ту же структуру WSAOVERLAPPED ?
Ничего хорошего не будет, конкретные неприятности зависят от разных факторов. Повторное использование одной структуры WSAOVERLAPPED допустимо только после её обработки через GetQueuedCompletionStatus.
TC>4) можно ли в однопоточном приложении обойтись без IOCP ?
Нужно. IOCP обычно выбирают не из-за удобства, а из-за скорости работы при больших нагрузках. Однопоточное приложение большую нагрузку не потянет в силу ограничений архитектуры и мудрить с IOCP смысла не вижу.