LoginSignup
0

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-11-30
動作環境
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;
        }
    }

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0