Files
cpp-httplib/docs-src/pages/ja/cookbook/c13-max-timeout.md
yhirose c95d799180 Polish the wording of the updated docs pages
Reword the Japanese sentences so they read naturally, and correct the
size of the llama.cpp server sources in the code reading chapter.
2026-10-08 20:39:13 -04:00

2.0 KiB
Raw Blame History

title, order, status
title order status
C13. 全体タイムアウトを設定する 13 draft

C12. タイムアウトを設定するで紹介した3種類のタイムアウトは、いずれも「1回のsendやrecv」に対するものです。リクエスト全体の所要時間に上限を設けたい場合は、set_max_timeout()を使います。

基本の使い方

httplib::Client cli("http://localhost:8080");

cli.set_max_timeout(5000); // 5秒(ミリ秒単位)

auto res = cli.Get("/slow-endpoint");

ミリ秒単位で指定します。リクエストを始めてからこの時間が過ぎると、レスポンスを待っている途中でも打ち切られます。ただし、接続や送信で待たされる時間まで短くなるわけではありません。そちらはset_connection_timeoutとset_write_timeoutで調整します。

std::chronoで指定する

こちらもstd::chronoの期間を受け取るオーバーロードがあります。

using namespace std::chrono_literals;
cli.set_max_timeout(5s);

どう使い分けるか

set_read_timeoutは「データが来ない時間」のタイムアウトなので、少しずつデータが流れ続ける状況では発火しません。たとえば1秒ごとに1バイト届くようなエンドポイントは、set_read_timeoutをいくら短くしてもタイムアウトしません。

一方、set_max_timeoutは「経過時間」に対する上限なので、こうしたケースでも確実に止められます。外部APIを叩くときや、ユーザーを待たせすぎたくないときに重宝します。

cli.set_connection_timeout(3s);
cli.set_read_timeout(10s);
cli.set_max_timeout(30s); // 全体で30秒を超えたら中断

Note: set_max_timeout()は通常のタイムアウトと併用できます。短期的な無反応はset_read_timeoutで、長時間の処理はset_max_timeoutで、という二段構えにするのが安全です。