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,これ以外に思い当たる解法がない.

*1:あと,Vistaでいろいろと心温まる状況が予測される