Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

MFC CSocket, чтение нескольких порций функцией Recieve - вызывает Assert

4.8K
19 июля 2004 года
Toc_vremenno
17 / / 02.04.2004
Привет. Это опять я и опять с Assert'ом :)

Дело вот в чём. Как всегда в сборке Release всё работает. Стоит лишь поставить сборку Debug, как тут же выскакиевает Assert. И вот на чём.
Я отсылаю через сокет http запрос для web сервера. Если сервер отвечает одной порцией, то функция Recieve считывает всё пучком и заканчивает работу, как только сервер рвёт соединение.
Но как только сервер не укладывается в одну порцию, я тут же получаю Assert после скачивания первой порции.
Как я подозреваю, дело в том, что функции Recieve приходится "простаивать", пока придёт вторая порция. То бишь, вызывается она второй раз, а данных-то пока и нет.

Assert является некритичным, то есть, нажимаю пропуск и программа нормально продолжает работать и показывает полный текст ответа сервера.


Полагаю, я неправильно обращаюсь с этим капризным сокетом :) Слишком грубо, наверное. Может кто чего подскажет?
4.8K
19 июля 2004 года
Toc_vremenno
17 / / 02.04.2004
Вот фрагмент кода.

Унаследовал свой класс сокета. Переопределил функцию 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;
}
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог