A>Вопрос: почему recv() в данной ситуации не блокируется? Что не так делаем?
WSAEventSelect — переводит сокет в неблокирующий режим. Это пишут в классике, пишут в календарях. Почему у вас ф. не прочла данные, хотя взведено события о присутствии данных — это вопрос отдельный, похоже код у вас криво написан. Возможностей много: например, событие вы создали через WSACreateEvent, а ф. эта создает событие с ручным сбросом. Если вы его разок поюзали, надо не забыть перед вызовом WaitForSingleObject его сбросить в несигнальное состояние.