![]() |
Модераторы: feodorv |
![]() ![]() ![]() |
|
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 6 Всего: 207 |
предположу start_read->async_read->readed причем async_read->readed может быть синхронным (если данные уже получены) в этом случае имеем два последовательных async_write без вызова written -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
phprus |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 22.8.2006 Репутация: 1 Всего: 3 |
А если использовать read и write параллельно с разными, несвязанными данными, то баг тоже воспроизведется? Если да, то это будет по сути баг в ASIO. TCP полнодуплексный протокол и может работать одновременно в обе стороны. На каком канале? 100 Мбит/с? |
|||
|
||||
mes |
|
||||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 1 Всего: 250 |
у меня подозрения, что Вы не с причиной разобрались, а просто создали благоприятные условия, в которых _баг_ не/реже проявляется.. так же как и секундой слипа.. Добавлено через 10 минут и 47 секунд
![]() Добавлено через 11 минут и 34 секунды рано эмоции выпустили ![]() |
||||
|
|||||
mes |
|
||||||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 1 Всего: 250 |
данные не портятся, просто приходят не одним куском , а несколькими, на что Вам намекал strlen.. Добавлено через 1 минуту и 55 секунд а Вы их неправильно интерпретировали неполные блоки, что и служило поводом для исключения.. и еще сервер получив неправильный блок, переправлял его как полный клиенту.. поэтому ошибка только в логах server_out и client_in.. Добавлено через 3 минуты и 30 секунд т.е. неправильная интерпретация полученных данных сервером, создавала проблему с логами, а неправильная интерпретаця клиентом вызывало исключение.. Добавлено через 5 минут и 54 секунды в общем у Вас получился пример, ловко собравший в себе несколько похожих ошибок, и устранение одной, изменяло ситуацию, но не исправляло ее - именно это и привело к путанице.. Добавлено через 9 минут и 14 секунд хотя помимо названных причин, вроде еще одна должна быть для полной картины.. Добавлено через 13 минут и 25 секунд
не туда акцент.. проблема может быть не из за того, как говорится в цитате, что операция чтения запущена наряду с операцией записи, а в том что, например, при чтении подряд можно запустить две операции записи.. |
||||||
|
|||||||
boostcoder |
|
||||||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 13 Всего: 110 |
подозреваю что да. тут не данные навязывают ограничения, а asio.
возможно это действительно не баг, а ограничение реализации asio. почитай: http://boost.2283326.n4.nabble.com/Multipl...-td2579621.html да. завтра смогу проверить на 1гбит канале.
так же, прочтите по ссылке. Igor R. - это второй человек в поддержке asio. я полагаю весьма компетентный. да, можно. но не при помощи async_write(). нужно писать обертку над сокетом(сегодня этим и займемся ;) ), и в ней использовать socket::async_write_some() и socket::async_read_some(). на сколько я понял из того что по ссылке. Добавлено через 1 минуту тест работает почти 7 часов. |
||||||
|
|||||||
mes |
|
||||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 1 Всего: 250 |
кстати комбинация с перемещением start_read во written поможет только для пинг понговского обмена, как у Вас в примере..
при нарушении симметрии на чтение запись, опять начнутся проблемы при такой архитектуре.. Добавлено через 2 минуты и 21 секунду будет работать, потому что Вы искусственно создали благоприятные условия.. шаг влево или вправо возродит этот баг в каком то из его проявлений.. Добавлено через 2 минуты и 40 секунд
сейчас.. Добавлено через 5 минут и 3 секунды нет не поняли ![]() и уверен, что не это служило поводом для багов у Вас в примере.. Добавлено через 7 минут и 17 секунд
ага так и предполагалось, из за чего ограничение на совместную запись/чтение.. но это никак не может служить ограничением на совмещением записи с чтением.. |
||||
|
|||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 13 Всего: 110 |
mes, насколько я понимаю, одновременное чтение/запись нужно реализовать согласно этому принципу: http://www.boost.org/doc/libs/1_46_0/doc/h...re/reactor.html
Добавлено через 1 минуту и 37 секунд MAKCim, скажите, sendmsg() и recvmsg() можно использовать одновременно? т.е. с одним сокетом. |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 1 Всего: 250 |
||||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 6 Всего: 207 |
да входной и выходной буферы сокета независимы я даже больше скажу, можно одновременно из разных потоков делать sendmsg() правда насчет атомарности записи данных (данные каждого sendmsg() запишутся непрерывно) не уверен -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 1 Всего: 250 |
||||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 13 Всего: 110 |
mes, я это видел.
но я никогда такого не проделывал прежде. и тем более с sendmsg() и recvmsg(). я просто хочу понять, это ограничение asio, или OS-API. |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 1 Всего: 250 |
мне кажется Вы причины проблемы до сих пор не поняли, из за этого с ужасом ищете обходные варианты..
Добавлено @ 13:32 что Вы подразумеваете под "это" ?.. Это сообщение отредактировал(а) mes - 10.4.2011, 13:32 |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 6 Всего: 207 |
![]() еще раз убедился в том, как С++ на примере boost'а усложняет жизнь было бы что-то другое, можно было посмотреть реализацию и выяснить все вопросы лезть же в boost удовольствие сомнительное ;) -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
boostcoder |
|
||||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 13 Всего: 110 |
понял. спасибо. значит нужно автора asio закидать письмами с четкими вопросами. что конкретно нужно изменить? я тоже понимаю что что-то не так. но согласно приведенной ссылке, во втором посте есть такое:
мне не кажется, что тут говорится о том, что можно читать и писать одновременно? |
||||
|
|||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 1 Всего: 250 |
||||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Сети | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |