у меня есть клиент и сервер, использующие boost :: asio
асинхронно. Я хочу добавить несколько таймаутов, чтобы закрыть соединение и, возможно, повторить попытку, если что-то пойдет не так.
Моя первоначальная мысль заключалась в том, что каждый раз, когда я вызываю функцию async_
, я должен также запускать deadline_timer
] истекает после того, как я ожидаю завершения асинхронной операции. Теперь мне интересно, обязательно ли это в каждом случае.
Например:
async_resolve
предположительно использует системный преобразователь, в который встроены таймауты (например, RES_TIMEOUT
в ] resolv.h
, возможно, переопределен конфигурацией в /etc/resolv.conf
). Добавляя свой собственный таймер, я могу вступить в конфликт с тем, как пользователь хочет, чтобы его преобразователь работал.
Для async_connect
, системный вызов connect (2)
имеет встроенный тайм-аут
и т. д.
Таким образом, какие (если есть) вызовы async_
гарантированно вызывают свои обработчики в пределах «разумные» сроки? И если время ожидания операции [может | делает], будет ли обработчику передать ошибку basic_errors :: timed_out
или что-то еще?