• システム開発に関わる内容をざっくりと書いていく

C# SocketException 接続失敗の見方

SocketException は TCP/UDP 層の失敗。HttpClient や SqlClient の内側に出ることが多く、「接続できない」系の一次切り分けに使う。

先に結論

  • まず ErrorCode / SocketErrorCode を見る(拒否・到達不能・リセットなど)
  • 宛先ホスト・ポート・DNS が正しいかを先に確認
  • ファイアウォール・プロキシ・コンテナのネットワーク分離を疑う
  • 負荷時だけならソケット枯渇・TIME_WAIT も候補

よく見る SocketError

  • ConnectionRefused … 相手が聞いていない/ポート誤り
  • HostUnreachable / NetworkUnreachable … 経路・ルーティング
  • TimedOut … 応答なし(FW ドロップ含む)
  • ConnectionReset … 相手または途中装置が切断
  • AddressAlreadyInUse … バインド競合(サーバ側)

切り分け手順

  1. 例外メッセージと SocketErrorCode を控える
  2. 接続先 URL/ホスト/ポートをログ(秘密情報は出さない)
  3. 同一マシンから Test-NetConnection / curl で到達性を確認
  4. DNS 解決結果が想定 IP か確認
  5. 再現が間欠なら枯渇・相手側制限を疑う

アプリ側でよくある原因

  • 環境変数の向き先ミス(dev/stg の取り違え)
  • HttpClient を都度 new してソケット枯渇
  • 短すぎる接続タイムアウト
  • IPv6 / IPv4 の解決ずれ

関連: HttpClient ソケット枯渇 / HttpClient タイムアウト

ざっくりまとめ

  • ErrorCode で拒否・到達不能・リセットを分ける
  • 宛先と到達性をコード外でも確認
  • 間欠は枯渇・経路・相手側制限を疑う

関連記事