2014年6月15日日曜日

【備忘録】eclipse の JUnit や DDMS などでコネクションエラーが発生する問題

eclipse で JUnit を実行した場合や、DDMS のログに、コネクションエラーが出力されるようになってしまった。

発端は、ネットワークアダプタのドライバを、アンインストールして、インストールしたこと、もしくは、不要な”ローカル エリア接続”を、レジストリから削除して、名前を変更したからかもしれない。

もちろん、それまでは、普通に動作していたし、変更後も同じ条件で動作させた。

Google 先生に聞いたところ、どうやら JavaVM が、IPV6 で通信を行ってしまうかららしい。
ちなみに、現在の環境では、IPV6 は、設定で無効にしている。

しかし、何を基準に切り替えているのか不明・・・

以下のオプションを Java の実行時パラメータに追加すると、現象が発生しなくなった。

-Djava.net.preferIPv4Stack=true


追加する箇所は、Java を起動している、以下のような場所。
・eclipse.ini
・「Window」⇒「Preferences」⇒「Java」⇒「Installed JREs」で、インストールされている Java を選択して、「Edit」ボタンを押下。「Default VM arguments」
・プラグインや、プロジェクト毎に、java の環境を設定している場合の VM オプション。
等々。


最後に、起きた現象を記載しておく。

DDMS は、「Failed to initialize Monitor Thread: Unable to establish loopback connection」というダイアログが開く。
後は、Console ビューに、
[2014-06-15 14:55:21 - DeviceMonitor] Connection attempts: 1
[2014-06-15 14:55:23 - DeviceMonitor] Connection attempts: 2
[2014-06-15 14:55:24 - DeviceMonitor] Connection attempts: 3
・・・
など、ずっとエラー表示され続ける。

JUnit の場合は、テストケースを実行すると、しばらくしてから、以下のようなエラーがでる。
Could not connect to:  : 64389
java.net.SocketException: Invalid argument: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:579)
at java.net.Socket.connect(Socket.java:528)
at java.net.Socket.(Socket.java:425)
at java.net.Socket.(Socket.java:208)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.connect(RemoteTestRunner.java:570)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:381)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)