動作環境
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;
}
}
// 正常な場合の処理 (省略)
}