Автоматически истекает время ожидания любых асинхронных вызовов boost :: asio?

у меня есть клиент и сервер, использующие boost :: asio асинхронно. Я хочу добавить несколько таймаутов, чтобы закрыть соединение и, возможно, повторить попытку, если что-то пойдет не так.

Моя первоначальная мысль заключалась в том, что каждый раз, когда я вызываю функцию async_ , я должен также запускать deadline_timer ] истекает после того, как я ожидаю завершения асинхронной операции. Теперь мне интересно, обязательно ли это в каждом случае.

Например:

  • async_resolve предположительно использует системный преобразователь, в который встроены таймауты (например, RES_TIMEOUT в ] resolv.h , возможно, переопределен конфигурацией в /etc/resolv.conf ). Добавляя свой собственный таймер, я могу вступить в конфликт с тем, как пользователь хочет, чтобы его преобразователь работал.

  • Для async_connect , системный вызов connect (2) имеет встроенный тайм-аут

  • и т. д.

Таким образом, какие (если есть) вызовы async_ гарантированно вызывают свои обработчики в пределах «разумные» сроки? И если время ожидания операции [может | делает], будет ли обработчику передать ошибку basic_errors :: timed_out или что-то еще?

19
задан eater 7 February 2011 в 18:57
поделиться