NICがない環境でJmDNSにハマる.
症状
JmDNS を使ったシステムを組んだ.テスト機に持って行った id:mitsu48 曰く,「なんか動かないっすよ」
2009/09/17 11:57:27 javax.jmdns.impl.JmDNSImpl closeMulticastSocket 警告: closeMulticastSocket() Close socket exception java.net.SocketException: error setting options at java.net.PlainDatagramSocketImpl.leave(Native Method) at java.net.PlainDatagramSocketImpl.leave(Unknown Source) at java.net.MulticastSocket.leaveGroup(Unknown Source) at javax.jmdns.impl.JmDNSImpl.closeMulticastSocket(JmDNSImpl.java:311) at javax.jmdns.impl.JmDNSImpl.openMulticastSocket(JmDNSImpl.java:292) at javax.jmdns.impl.JmDNSImpl.init(JmDNSImpl.java:262) at javax.jmdns.impl.JmDNSImpl.<init>(JmDNSImpl.java:202) at javax.jmdns.JmDNS.create(JmDNS.java:32)
うーむ.これはつまり,loopbackデバイスしかないので,マルチキャストソケットを作れず,なのにエラー始末ルーチンへ飛んでトンでもないことになっているのでは….
NICがあっても,media disconnecedなら,java.net.InetAddress はそれを除外するらしい.まあ,何の無理もない挙動か.
解法
NICがあるなら,それを有効にする.有効にできないなら,TAP-WIN32をインストールすればよい.
動いた.
偉いぞTAP-WIN32.
ちょっと敷居が高くなってしまうが*1,これ以外に思い当たる解法がない.