QNX RTP Logo QNX Realtime Platform: Русский Портал QNX
Thursday, 20 Nov 2008 20:54
Меню

Проект OpenNET - все о Unix
Главная

 · Начало · Статистика · Поиск ·

  QNX.ORG.RU —› Программирование под QNX —› Закрытие OCB из менеджера ресурсов без запроса клиента

Посл.ответ Сообщение


Дата: 2 Фев,  12:08

Привет

Кто посоветует корректный способ закрыть OCB из менеджера ресурсов без запроса клиента? Есть ConnectDetach() и _msg_info::scoid, но я очень сомневаюсь, что при такой операции на канал поступит импульс и библиотека вызовет iofunc_close_ocb(). Во всяком случае в документакции указано, что ConnectDetach() надо делать именно после получения импульса об отсоединении клиента. Следовательно, нелогично, чтоб эта же функция опять генерировала импульс.

Буду благодарен за дельные советы в даном направлении.


Дата: 23 Апр,  23:37

Отвечаю на собственный вопрос:
Менеджер ресурсов не может по собственному желанию закрыть OCB. В таких случаях надо просто отмечать OCB как невалидный и возвращать ошибку на все последующие операции с ним, кроме close.


Дата: 8 Сен,  10:52

Вопрос у меня возник подобный и связан вот с чем.
Открывается через QNET на другой машине ресурс. Далее на первой анализирутся код возврата при работе с этим ресурсом для обнаружения нарушения связи по сети. Если она пропадает из-за русурс закрывается и делаются попытки (access) переоткрыть (open) ресурс. Тут возникает проблема с открытием. Точно сказать не могу где конкретно возникает продлема: с access или с open (не мой код). Причем с третьей машини этот ресурс открывается нормально.
Думаю что проблема с незакрытым OCB. Он ведь закрывается по close (соотв. посылкой сообщения).
При отрытии канала ChannelCreate можно установить флаг _NTO_CHF_COID_DISCONNECT - при зарзрыве соединения в канал будет посла импульс с кодом _PULSE_CODE_COIDDEATH. Обработка этого импульса есть в библиотеке dispatch. Как я понял, до библиотеки ресмжр дело не доходит. Что тогда происходит с OCB и свойствами клиента (coid, path и пр.)?


Дата: 10 Сен,  21:32 · Поправил: oder

Для менеджера ресурсов не надо делать ChannelCreate. Только dispatch_create и resmgr_attach. Посмотрите примеры создания менеджера ресурсов в документации по QNX (Programmer's Guide -> Writing a Resource Manager).
Все импульсы библиотека обрабатывает автоматически. При отключении клиента, вашему серверу придет resmgr_io_funcs_t::close_ocb.
Проблемы с повторным открытием могут возникать если из resmgr_connect_funcs_t:: open вызвать resmgt_open_default(), а потом вернуть ошибку. Так делать никогда нельзя: от этого у библиотеки крыша едет. Всегда надо проверить заблаговременно, все ли условия удовлетворяются и возможно ли открыть ресурс для даного клиента в данном состоянии и лишь потом вызывать resmgr_open_default() для создания OCB. Если у вашего кода есть причины отказать в открытии файла, ошибку надо вернуть вначале и resmgr_open_default() не вызывать. Если вызвали - можно возвращать только EOK.

You must login to post.

©   2000-2003 Команда проекта QNX.ORG.RU // QNX.ORG.RU Team
Авторы проекта: Дмитрий Алексеев [dmi] и Дмитрий Васильев. Техническое сопровождение проекта: Игорь Сорокин [isorokin]. Информационное сопровождение: Дмитрий Алексеев [dmi]
QNX - зарегистрированная торговая марка QNX Software Systems, Ltd., Canada. Остальные упоминаемые на сайте торговые марки и логотипы являются исключительно собственностью их уважаемых владельцев. Ничьи права не затронуты. Материалы сайта не могут быть скопированы и где-либо использованы в той или иной форме без письменного разрешения разработчиков сайта.
Powered by Mambo Open Source