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