![]() |
Модераторы: feodorv |
![]() ![]() ![]() |
|
orsobruno |
|
||||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 25.1.2011 Репутация: нет Всего: нет |
Есть многопоточный асинхронный сервер на базе примера буст
далее сам класс соединений c запусками асинхр операций
Пример стандартный, но где-то что-то начинает идти не так, потому что при тесте беск циклом синхронных запросов, тест завершается сообщением что невозможно выполнить операцию на сокете, так как очередь переполнена, значит где-то сокет на сервере не закрывается... как это отловить или как увидеть реальное кол-во в очереди находящихся в очереди... |
||||
|
|||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 13 Всего: 110 |
||||
|
||||
orsobruno |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 25.1.2011 Репутация: нет Всего: нет |
Спасибо за ответ.
typedef boost::shared_ptr<jconnection> connection_ptr; connection_ptr new_connection_; в конструкторе server ... new_connection_(new jconnection(io_service)) пример взят из boost принудительное закрытие применяется, когда что-то было не так с трансфером или данными Это сообщение отредактировал(а) orsobruno - 25.1.2011, 14:43 |
|||
|
||||
boostcoder |
|
||||||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 13 Всего: 110 |
мне, конкретно не нравится строка: new_connection_.reset(new jconnection(io_service_));
я никогда не смотрел примеры HTTP, потому никогда не видел такого трюка. но даже посмотрев, все равно не понимаю надобности в reset.. обычно, модель следующая:
т.е. созданное соединение запущенно, и живет своей жизнью. и не нужно его трогать ![]() в вашем же примере, если я ничего не напутал(что не исключено), после вызова метода start(), происходит удаление _объекта_соединения_. но это не дает ответ на вопрос о утекающих сокетах. это первое. второе - вы изменили пример взятый из доки? что изменили, и зачем? Добавлено @ 15:04 изменения вижу в этой строке:
в оригинале:
собственно, так же не понимаю надобности... но не в этом суть.. показывайте тело handle_read_header() Это сообщение отредактировал(а) boostcoder - 25.1.2011, 15:05 |
||||||
|
|||||||
orsobruno |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 25.1.2011 Репутация: нет Всего: нет |
В handle_read_header() идет десериализация заголовка запроса ( inbound_header_ )
и запускается следующий async_read, чтобы читать основное сообщение Я понимаю, что Вы знаете как сделать правильно, и если я буду все писать, то Вы предложите правильную конструкцию, но так я Вас замучаю. Давайте остановимся на вопросе, можно ли узнать число коннектов в очереди и я методом мучений постараюсь сам понять? |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 13 Всего: 110 |
io_service не предоставляет такой возможности, к сожалению :( есть подозрение, что у вас не вызывается деструктор jconnection. впишите в него какой-то вывод, и проверьте, вызывается ли он на самом деле. второе - деструктор может не вызваться потому, что у jconnection есть незавершенные операции. поиграйтесь с socket_.close() и socket_.cancel() ну и отпишитесь о результате. любопытно ведь ![]() |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 13 Всего: 110 |
а это кстати зачем? сокет закроется по завершении всех операций, когда разрушится объект jconnection. по идее, у вас не вызывается деструктор jconnection. |
|||
|
||||
![]() ![]() ![]() |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Сети | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |