Здравствуйте, butcher, Вы писали:
B>WSAEWOULDBLOCK означает, что операция ввода/вывода требует блокировки для удачного завершения, другими словами в данный момент система не готова вам отдать данные. Когда вы в дебагере принмаете, то между каждым вызовом recv система успевает принять данные, обработать их соответсвующим образом и отдать вам.
B>Что делать вам: вам нужно изменить алгоритм приёма, т.е. читать данные до ошибки WSAEWOULDBLOCK, потом ждать следующего FD_READ и читать дальше, в случае возниконовения другой ошибки обрабатывать её соответствующим образом.
Точно так. Стормозил и неправильно понял МСДН — библию программиста

. Т.е. проблема решаема. Спасибо. Только я вот почитал ответ от "Maxim S. Shatskih" и сделал аналогичный пример, но на блокирующих сокетах без использования МФС. Там действительно не нужно делать Sleep. Вот как выглядит последний самый интересный кусок кода:
////////////////////////////////////////////////////////
CStdioFile zaxs;
zaxs.Open("letter",CFile::modeCreate|CFile::modeWrite);
while(bait>0)
{
bait=recv (srv_socket , szBuf, 65536, 0);
zaxs.Write(szBuf,bait);
}
zaxs.Close();
AfxMessageBox("файл скачан");
closesocket (srv_socket);
/////////////////////////////////////////////////////////////////
Т.е. принимает она нормально, но до поры до времени — пока данные не кончатся, а потом тормоза... В принципе как в теме CAcyncSocket&recv указано, можно через list узнать сколько байт точно нужно читать, но решение честно говоря некрасивое. Неужели нет другого выхода???