2012-06-28 2 views
2

У меня есть сервер DBus, который предоставляет метод, требующий огромного времени для завершения (около 3 минут). Клиент выполняет синхронный вызов этого метода.DBus синхронный тайм-аут вызова

Проблема в том, что через 25 секунд клиент выдает сообщение об ошибке, потому что «не получил ответа».

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

Я пытался использовать эту строку в моей конфигурации сервера:

<limit name = "reply_timeout">240000</limit> 

, но ситуация не меняется.

Любая идея?

ответ

3

Этот параметр limit настраивает демона шины, который является только одним из процессов. Остальные являются клиентом и сервером, а конкретная библиотека D-Bus, используемая на каждом конце, может иметь таймаут по умолчанию для синхронных сообщений. И 25 секунд действительно _DBUS_DEFAULT_TIMEOUT_VALUE в libdbus, эталонной реализации C.

Изменение тайм-аута в клиенте, например, в dbus_connection_send_with_reply_and_block, проще, чем изменение API для асинхронности.

Смежные вопросы