MFC CSocket, чтение нескольких порций функцией Recieve - вызывает Assert
Дело вот в чём. Как всегда в сборке Release всё работает. Стоит лишь поставить сборку Debug, как тут же выскакиевает Assert. И вот на чём.
Я отсылаю через сокет http запрос для web сервера. Если сервер отвечает одной порцией, то функция Recieve считывает всё пучком и заканчивает работу, как только сервер рвёт соединение.
Но как только сервер не укладывается в одну порцию, я тут же получаю Assert после скачивания первой порции.
Как я подозреваю, дело в том, что функции Recieve приходится "простаивать", пока придёт вторая порция. То бишь, вызывается она второй раз, а данных-то пока и нет.
Assert является некритичным, то есть, нажимаю пропуск и программа нормально продолжает работать и показывает полный текст ответа сервера.
Полагаю, я неправильно обращаюсь с этим капризным сокетом :) Слишком грубо, наверное. Может кто чего подскажет?
Унаследовал свой класс сокета. Переопределил функцию OnRecieve. В ней запускаю процесс чтения из сокета. Извращённо? ;)
void CMySocket::OnReceive(int nErrorCode)
{
// если процесс чтения уже пущен,
// то последующий вызов OnRecive игнорирую
if(thread!=NULL) return;
// создаю процесс
thread=new CMyThread(this);
thread->CreateThread();
}
int CMyThread::Run()
{
char buf[MAX_BUF];
int i=0;
while((i=sock->Receive(buf,MAX_BUF-1))>0)
{
// чё-то делаю
///////
}
return 0;
}