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