Socket is closed
接続が途中で閉じられた状態。中間機器のアイドルタイムアウトが主因。
エラー文字列
Socket is closed
何が起きているか
確立していた接続が、予期せず閉じられました。
⭐ **「繋がらない」ではなく「繋がっていたものが切れた」**という点が重要です。ここが Unable to connect to API との違いで、切り分けの方向がまったく変わります。
| 繋がらない | 切れた(このエラー) | |
|---|---|---|
| 疑うもの | DNS・ファイアウォール・プロキシ設定 | アイドルタイムアウト・接続数制限・不安定な回線 |
| 発生タイミング | 起動直後・毎回 | しばらく使った後・長い応答の途中 |
実際に多い原因
| 原因 | 典型的な症状 |
|---|---|
| 中間機器のアイドルタイムアウト | 少し放置してから操作すると切れる。ファイアウォール・NAT・ロードバランサが無通信の接続を破棄している |
| 長い応答の途中で切られる | 大きな生成をさせると起きやすい |
| 無線が不安定 | Wi-Fi のローミング、電波の弱い場所 |
| VPN の再接続 | VPN が張り直されるタイミングで既存接続が切れる |
| 省電力・スリープ | ノートPCの蓋を閉じた、スリープから復帰した |
⭐ 「席を外して戻ってきた最初の操作で失敗する」なら、ほぼアイドルタイムアウトです。
直し方
1. まず送り直す
一時的な切断であれば、そのまま再送で通ります。これで通るなら恒久的な問題ではありません。
2. パターンを確認する
再現の仕方で原因が絞れます。
| 起きるタイミング | 疑うもの | 進む先 |
|---|---|---|
| 放置した後の最初の操作 | アイドルタイムアウト | 手順 3 |
| 長い応答の途中 | プロキシのバッファリング/転送上限 | 手順 4 |
| 場所を移動した後 | 無線のローミング | 手順 5 |
| スリープ復帰後 | 接続の張り直し | 再送で解決。手順 5 |
| いつでもランダム | 回線品質 | 手順 5 |
3. アイドルタイムアウトへの対処
中間機器のタイムアウトそのものは利用者側では変えられません。運用で回避します。
- 長時間放置した後は、軽い操作を1回挟んでから本題に入る
- 席を外す前にセッションを終え、戻ってから開き直す
- 社内ネットワークなら、管理者にアイドルタイムアウトの設定値を確認する(300秒などに設定されている例があります)
4. 長い応答で切れる場合
作業を分割してください。1回のやり取りを短くすると、接続が張られている時間が短くなり、切られる確率が下がります。
- 一度に大量のファイルを読ませない
- 生成させるコードの量を1回あたり小さくする
- 大きなリファクタはディレクトリ単位に分ける
待ち時間の上限を上げる対処もありますが、「切られている」場合は上限を延ばしても効きません。上限に達したのか切断されたのかは、メッセージで区別してください。
Request timed out→ 上限に達した。対処はこちらSocket is closed→ 切られた。上限の調整では直らない
5. 回線の安定性を確認する
macOS / Linux
ping -c 50 api.anthropic.com
Windows(PowerShell)
⚠️ プロパティ名が PowerShell のバージョンで違います。 Windows に標準搭載されているのは 5.1 で、そちらは ResponseTime です。Latency を指定するとエラーにならず、何も表示されないまま終わります。「実行したのに結果が出ない」の正体はこれです。
まずバージョンを確認してください。
$PSVersionTable.PSVersion
Windows PowerShell 5.1(標準搭載)
Test-Connection api.anthropic.com -Count 50 |
Measure-Object -Property ResponseTime -Average -Maximum
PowerShell 7 以降
Test-Connection api.anthropic.com -Count 50 |
Measure-Object -Property Latency -Average -Maximum
バージョンを気にせず書く
$p = if ($PSVersionTable.PSVersion.Major -ge 7) { 'Latency' } else { 'ResponseTime' }
Test-Connection api.anthropic.com -Count 50 | Measure-Object -Property $p -Average -Maximum
パケットロスがある、あるいは応答時間のばらつきが大きい場合は回線側の問題です。
- 無線を有線に変える
- VPN を切って試す
- テザリングなど別回線で試す
別回線で起きないなら、元の回線かその経路上の機器が原因と確定できます。
6. リトライ回数を増やす(無人実行)
CI やバックグラウンドで長時間動かす場合、切断のたびに止まると困ります。
export CLAUDE_CODE_MAX_RETRIES=15
⚠️ 対話中のセッションでこれを大きくしても体感は改善しません。 無人実行のための設定です。
再発防止
- 長い作業を1回のやり取りに詰め込まない。 切断のリスクは接続時間に比例します
- ノートPCで作業するなら、スリープ設定を確認する。蓋を閉じるたびに切れます
- 社内ネットワークで頻発するなら、アイドルタイムアウトの値を管理者に確認する。原因が特定できれば運用でかわせます
- 「繋がらない」と「切れた」を混同しない。メッセージが違えば原因も対処も違います