Модераторы: feodorv

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> баг asio? или баг TCP стека? 
V
    Опции темы
mes
Дата 9.4.2011, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 1
Всего: 250



start_write из writen.. 


--------------------
PM MAIL WWW   Вверх
boostcoder
Дата 9.4.2011, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 13
Всего: 110



и?
запуск следующей записи когда предыдущая завершилась.
PM WWW   Вверх
mes
Дата 9.4.2011, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 1
Всего: 250



Цитата(boostcoder @  9.4.2011,  19:58 Найти цитируемый пост)
и?

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


--------------------
PM MAIL WWW   Вверх
boostcoder
Дата 9.4.2011, 21:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 13
Всего: 110



mes, на то он и _completion_handler_ чтоб из него производить некоторые действия по окончанию асинхронной операции.
PM WWW   Вверх
mes
Дата 9.4.2011, 21:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 1
Всего: 250



в бустовых примерах подобное применение имеется ?


--------------------
PM MAIL WWW   Вверх
boostcoder
Дата 9.4.2011, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 13
Всего: 110



Цитата(mes @  9.4.2011,  21:30 Найти цитируемый пост)
в бустовых примерах подобное применение имеется ?

конечно. почти в каждом примере, где одна асинхронная операция создает другую.

зы
да и чем вызов start_write() из хэндлера, отличается от вызова из какого-то другого места?

Это сообщение отредактировал(а) boostcoder - 9.4.2011, 22:05
PM WWW   Вверх
boostcoder
Дата 9.4.2011, 22:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 13
Всего: 110



странно все это..
при загрузке сети, иногда валится, иногда нет...
любопытно, почему когда валится, в хэндлер не передается ошибка. хотя должна. т.е. из этого следует, что asio думает что все гуд smile

Добавлено через 6 минут и 54 секунды
опять свалилось :(

клиент ожидал 8475039, а получил 84
user posted image

обратите внимание. значение 8475038 повторяется дважды.

и еще одна странность. клиент упал с таким сообщением:
Цитата

terminate called after throwing an instance of 'std::runtime_error'
  what():  read error. expected 8475039 get 84

а пришло 847  smile

Добавлено через 12 минут и 27 секунд
 smile 
PM WWW   Вверх
mes
Дата 9.4.2011, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 1
Всего: 250



попробуйте обнулять тот буффер, который создаете..


--------------------
PM MAIL WWW   Вверх
mes
Дата 9.4.2011, 23:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 1
Всего: 250



Цитата

//  fwrite(buf, recv_buffer_size, 1, out);

а записанное выглядит ровно, без сомнений ?

Добавлено через 49 секунд
Цитата(boostcoder @  9.4.2011,  20:26 Найти цитируемый пост)
 на то он и _completion_handler_ 

да, тут зря я придрался.. 


--------------------
PM MAIL WWW   Вверх
boostcoder
Дата 9.4.2011, 23:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 13
Всего: 110



Цитата(mes @  9.4.2011,  22:52 Найти цитируемый пост)
попробуйте обнулять тот буффер, который создаете..

попробовал. на обоих сторонах.
при загруженной сети, клиент свалился с таким сообщением:
Цитата

terminate called after throwing an instance of 'std::runtime_error'
  what():  read error. expected 92410192 get 92410


во входящем буфере клиента было это:
user posted image
опять одно и то же значение повторяется дважды.

сервер отправил это:
user posted image


и снова непонятка... клиент говорит что получено 92410. но такого сообщения в входящих нет! smile 

это ###..

Добавлено @ 23:51
Цитата(mes @  9.4.2011,  23:31 Найти цитируемый пост)
а записанное выглядит ровно, без сомнений ?

на скринах, где я упоминаю server_*.log и client_*.log - это и есть то, что записано. т.е. сырые данные.

Добавлено @ 23:55
Цитата(boostcoder @  9.4.2011,  23:50 Найти цитируемый пост)
но такого сообщения в входящих нет!

кстати!
клиент падает по необработанному исключению. а в этом случае, файловые буфера сброшены не будут. потому я в логах не увижу последних данных.

сейчас повешу обработчик, и повторю тест.

Это сообщение отредактировал(а) boostcoder - 9.4.2011, 23:55
PM WWW   Вверх
mes
Дата 10.4.2011, 00:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 1
Всего: 250



Цитата(boostcoder @  9.4.2011,  22:50 Найти цитируемый пост)
во входящем буфере клиента было это:

какой именно буффер ? а то что то я запутался..

Добавлено через 1 минуту и 37 секунд
Цитата(boostcoder @  9.4.2011,  22:50 Найти цитируемый пост)
, клиент свалился с таким сообщением:

ну это как раз не удивительно, Вы не проверяете кол-во прочитанных байтов... 


--------------------
PM MAIL WWW   Вверх
boostcoder
Дата 10.4.2011, 00:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 13
Всего: 110



Цитата(mes @  10.4.2011,  00:00 Найти цитируемый пост)
какой именно буффер ?

вы последний выложенный мной архив с исходниками качали? смотрели их? чтоб я знал с какой стороны объяснять..
PM WWW   Вверх
mes
Дата 10.4.2011, 00:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 1
Всего: 250



попробуйте убрать из readed весь анализ приходящих данных и оставить только запись в файл.. 
только буффер не забудьте обнулять..

Цитата(boostcoder @  9.4.2011,  23:02 Найти цитируемый пост)
архив с исходниками качали? смотрели их?

да смотрел и как раз смотрю их.. 

Это сообщение отредактировал(а) mes - 10.4.2011, 00:08


--------------------
PM MAIL WWW   Вверх
boostcoder
Дата 10.4.2011, 00:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 13
Всего: 110



Цитата(mes @  10.4.2011,  00:06 Найти цитируемый пост)
весь анализ приходящих данных

вот это?:
Код

   char* p = strchr(buf, ':');
   if ( p ) {
      sscanf(p+1, "%8d", &tmp);
   } else {
      throw std::runtime_error("input data error!");
   }
   
   if ( idx != tmp ) {
      std::ostringstream os;
      os << "read error. expected " << idx << " get " << tmp;
      throw std::runtime_error(os.str());
   }


как же я тогда узнаю об ошибке?


Цитата(mes @  10.4.2011,  00:06 Найти цитируемый пост)
да смотрел и как раз смотрю их..

там есть файл wrappers.cpp, его Максим добавил. логи пишутся из оберток над sendmsg() и recvmsg(). т.е. по идее на 100% точно отражают происходящее.

PM WWW   Вверх
mes
Дата 10.4.2011, 00:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 1
Всего: 250



Цитата(boostcoder @  9.4.2011,  22:50 Найти цитируемый пост)
 server_*.log и client_*.log - это и есть то, что записано. т.е. сырые данные.

поставьте после каждой записи сырых данных еще запись какой нибудь последовательности..

Добавлено через 1 минуту и 24 секунды
Цитата(boostcoder @  9.4.2011,  23:11 Найти цитируемый пост)
как же я тогда узнаю об ошибке?

если вы о исключении, то запись дополнительной последовательности в файл должна показать причину.. 


--------------------
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.1296 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.