![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Randajad |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 295 Регистрация: 15.3.2012 Репутация: 8 Всего: 8 |
Всем доброго времени суток. Имеем:
Корректно ли вызывать async_read_some внутри самого хендлера? Гугл ничего не подсказывает, так что вроде как да. Только проблема в том, что когда отправляем пакет на N байт, то приходит два раза по N байт. А в чем ошибка понять не могу. Может это происходит из-за того, что параллельно с чтением идет асинхронная запись тоже? Это сообщение отредактировал(а) Randajad - 30.7.2012, 22:47 |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
вообще-то, методы async_* и нужно вызывать из хендлеров. Так что ты сделал правильно. Ошибку искать нужно где-то в другом месте.
|
|||
|
||||
| Randajad |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 295 Регистрация: 15.3.2012 Репутация: 8 Всего: 8 |
Спасибо за ответ. Но я не знаю уже где ошибку искать. :(
|
|||
|
||||
| boostcoder |
|
||||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
"отправляем" это async_write? что значит "приходит" ? читающая сторона дважды прочитывает одни и те же данные?
нет. нельзя одновременно иметь две операции чтения или записи. показывай больше кода. |
||||
|
|||||
| Randajad |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 295 Регистрация: 15.3.2012 Репутация: 8 Всего: 8 |
Нет. Есть opensource сервер, проверенный временем. Я пишу к нему клиент. Сервер отправляет пакет на 31 байт. Эти 31 байта у меня читаются, все хорошо. Только следом за этими 31-ю байтами мне приходят еще 31 байт. Я не знаю откуда они берутся.
У меня не две операции чтения/записи. У меня чтение и запись одновременно. По 1 операции того и того.
error.h
tcp socket предоставляет асинхронный сокет, который выполняет свои действия при вызове метода poll, также он предоставляет const u08* pointer, где находятся прочтенные данные. Ну и len - их длина. Добавлено через 2 минуты и 26 секунд В частности выводится READ LEN 31 два раза. :( Это сообщение отредактировал(а) Randajad - 31.7.2012, 10:27 |
||||
|
|||||
| Randajad |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 295 Регистрация: 15.3.2012 Репутация: 8 Всего: 8 |
Тесткейс. Выведет 2 раза readed len 23. А должен один раз. |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
измени этот метод так:
|
|||
|
||||
| Randajad |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 295 Регистрация: 15.3.2012 Репутация: 8 Всего: 8 |
Ошибка там не появляется, это для другого было.
Я решил еще более урезать test case. Ошибка пропала.
Правда непонятно из-за чего это все. Сейчас попробую медленно урезать. Это сообщение отредактировал(а) Randajad - 31.7.2012, 11:32 |
|||
|
||||
| Randajad |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 295 Регистрация: 15.3.2012 Репутация: 8 Всего: 8 |
Всем спасибо! Кажется, разобрался с ошибкой. В write забыл wpos += len. Из-за чего пакет отправлялся 2 раза, а сервер 2 раза отвечал, что странно.
Всем большое спасибо! Это сообщение отредактировал(а) Randajad - 31.7.2012, 11:48 |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |