C++ Builder XE4 > Indy > UDP通信 > Send() > 「モジュールXXXのアドレスXXXでアドレスXXXに対する読取り違反が起きました」 > 「#Socketエラー #10065ホストへのルートが存在しません」


動作環境
C++ Builder XE4
Indy 10.6.0.4975

エラー概要

UDP通信をするソフトにおいて、下記のエラーが発生していた。

モジュールXXXのアドレスXXXでアドレスXXXに対する読取り違反が起きました

調べていくと、下記の条件で発生することが分かった。

  • 特定のWindows 7 PCにおいて発生
    • 発生しないWindows 7 PCもある
  • PC起動してから、一度もEthernetケーブルを挿していない
    • 一度Ethernetケーブルを挿すと、以後、ケーブルを抜いてもエラーは出なくなる

エラー詳細

IndyのIdUDPClientのSend()において発生する。

try, catchでエラーを見て以下の情報を得た。

  • エラーメッセージ
    • #Socketエラー #10065ホストへのルートが存在しません
  • エラーのクラス名
    • EIdSocketError

対処

Send()をする部分をtry, catchで対処する

while(!Terminated) {
    try {
        Form1->IdUDPClient->Send(acmd, m_enqSJIS);
    } catch (Exception &exc) {
        // 以下の条件で発生するエラーの対処
        // A. 起動してから一度もEthernetケーブルを挿していない
        // B. 特定のPC(Window 7のうち特定のPC)において発生する
        if (exc.ClassName() == L"EIdSocketError") {
            continue;
        }
    }

    // 正常な場合の処理 (省略)
}