vine-users ML アーカイブ



[vine-users:074875] kernelバ ージョンの違いによる Multicastのエラー

  • From: Yasumitsu Ito <y-ito@xxxxxxxxxxxxxxxxxx>
  • Subject: [vine-users:074875] kernelバ ージョンの違いによる Multicastのエラー
  • Date: Thu, 10 Aug 2006 23:31:51 +0900
伊藤と申します。

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