伊藤と申します。
Vine 3.2 を使用しています。
立ち上げる kernel バージョンの違いによって、
Javaで作成されたMuticastソケットのインスタンスが複数作成できない
状況に直面しています。
エラーが発生: 2.4.31-0vl1.12
エラー無し: 2.4.27-0vl7.6
同じコードを用いた再現テストは、RedHat EL3,4や、
Fedora Core 4,5では発生しません。
起動する kernel バージョンをダウングレードすれば問題ありませんが、
kernelバージョンをかえずにこのエラーを発生させないためには、
kernel に何かしらの patch をあて kernel rebuild を行うより
仕方がないのでしょうか?
ちなみに、下記に示すコードは、ソースの公開されていない商用ソフトで
発生するエラーの原因を開発者に相談したところ、
最終的に原因として突き止めたものです。
以下にJavaのコードと、エラーメッセージ、uname -a の結果を載せます。
【Javaコード】
import java.io.*;
import java.net.*;
public class MulticastTest {
public static final int MCAST_PORT1 = 9999;
public static final int MCAST_PORT2 = 9999;
public static void main(String[] args){
MulticastSocket socket1 = null;
MulticastSocket socket2 = null;
try {
socket1 = new MulticastSocket(MCAST_PORT1);
socket2 = new MulticastSocket(MCAST_PORT2);
} catch (IOException e) {
e.printStackTrace();
System.exit(3);
}
}
}
※ MCAST_PORT1,MCAST_PORT2を異なるポートに指定した場合は成功します。
【実行結果とエラー】
$ /usr/java/jdk1.5.0_08/bin/java MulticastTest
java.net.BindException: Address already in use
at java.net.PlainDatagramSocketImpl.bind0(Native Method)
at java.net.PlainDatagramSocketImpl.bind(PlainDatagramSocketImpl.java:82)
at java.net.DatagramSocket.bind(DatagramSocket.java:368)
at java.net.MulticastSocket.<init>(MulticastSocket.java:147)
at java.net.MulticastSocket.<init>(MulticastSocket.java:112)
at MulticastTest.main(MulticastTest.java:17)
$ uname -a
Linux localhost.localdomain 2.4.31-0vl1.12 #1 Mon Dec 26 22:22:09 JST
2005 i686 unknown
以上、よろしくお願いいたします。
--
Yasumitsu Ito