Hi, Kaffe (1.1.1 and 1.1.2) does not allow multiple multicast sockets to bind to the same address/port pair.
I have attached a small test program which shows the issue. The output from the test program is: // Correct output: /usr/local/j2sdk1.4.2_01/bin/java -classpath build mcast.MulticastListener FIRST multicast socket bound to 224.0.0.9:1234 FIRST multicast socket joined 224.0.0.9 on interface 0.0.0.0 SECOND multicast socket bound to 224.0.0.9:1234 SECOND multicast socket joined 224.0.0.9 on interface 0.0.0.0 // Output under Kaffe 1.1.1 and 1.1.2: /usr/local/kaffe-1.1.2/bin/java -classpath build mcast.MulticastListener FIRST multicast socket bound to 224.0.0.9:1234 FIRST multicast socket joined 224.0.0.9 on interface 108.103.35.8 could not create SECOND multicast socket: java.net.BindException: Address already in use Is this known? Thanks, Everton
package mcast; import java.io.IOException; import java.net.InetAddress; import java.net.SocketException; import java.net.DatagramPacket; import java.net.MulticastSocket; import java.net.UnknownHostException; class MulticastListener { private static final String mcastAddr = "224.0.0.9"; private static final int mcastPort = 1234; private static void go() { // // Multicast Address // InetAddress multicastAddress; try { multicastAddress = InetAddress.getByName(mcastAddr); } catch (UnknownHostException e) { System.err.println("could not solve multicast address: " + e); return; } // // First Socket // MulticastSocket firstMcastSock; try { firstMcastSock = new MulticastSocket(mcastPort); } catch (Exception e) { System.err.println("could not create FIRST multicast socket: " + e); return; } System.out.println("FIRST multicast socket bound to " + mcastAddr + ":" + mcastPort); try { firstMcastSock.joinGroup(multicastAddress); } catch (IOException e) { System.err.println("could not join FIRST socket to multicast group: " + e); return; } try { System.out.println("FIRST multicast socket joined " + mcastAddr + " on interface " + firstMcastSock.getInterface().getHostName()); } catch (SocketException e) { System.err.println("could not get interface for FIRST multicast socket"); } // // Second Socket // MulticastSocket secondMcastSock; try { secondMcastSock = new MulticastSocket(mcastPort); } catch (Exception e) { System.err.println("could not create SECOND multicast socket: " + e); return; } System.out.println("SECOND multicast socket bound to " + mcastAddr + ":" + mcastPort); try { secondMcastSock.joinGroup(multicastAddress); } catch (IOException e) { System.err.println("could not join SECOND socket to multicast group: " + e); return; } try { System.out.println("SECOND multicast socket joined " + mcastAddr + " on interface " + secondMcastSock.getInterface().getHostName()); } catch (SocketException e) { System.err.println("could not get interface for SECOND multicast socket"); } } public static void main(String args[]) { go(); } }