diff -Nru apache-tomcat-6.0.14-src.orig/java/org/apache/catalina/tribes/membership/McastServiceImpl.java apache-tomcat-6.0.14-src/java/org/apache/catalina/tribes/membership/McastServiceImpl.java --- apache-tomcat-6.0.14-src.orig/java/org/apache/catalina/tribes/membership/McastServiceImpl.java 2007-07-20 04:21:20.000000000 +0200 +++ apache-tomcat-6.0.14-src/java/org/apache/catalina/tribes/membership/McastServiceImpl.java 2007-08-21 15:53:56.000000000 +0200 @@ -22,6 +22,7 @@ import java.net.DatagramPacket; import java.net.InetAddress; import java.net.MulticastSocket; +import java.net.BindException; import org.apache.catalina.tribes.MembershipListener; import java.util.Arrays; @@ -162,8 +163,23 @@ } protected void setupSocket() throws IOException { - if (mcastBindAddress != null) socket = new MulticastSocket(new InetSocketAddress(mcastBindAddress, port)); - else socket = new MulticastSocket(port); + if (mcastBindAddress != null) { + try { + socket = new MulticastSocket(new InetSocketAddress(address, + port)); + } + catch (BindException e) { + /* + * On some plattforms (e.g. Linux) it is not possible to bind + * to the multicast address. In this case only bind to the + * port. + */ + socket = new MulticastSocket(port); + } + } + else { + socket = new MulticastSocket(port); + } socket.setLoopbackMode(false); //hint that we don't need loop back messages if (mcastBindAddress != null) { if(log.isInfoEnabled())