When TUNNEL.bind_port is set to a value != 0, then starting more than one member on the same host fails with a bind exception on the second and subsequent member:
Exception in thread "main" java.net.BindException: Address already in use at java.base/sun.nio.ch.Net.bind0(Native Method) at java.base/sun.nio.ch.Net.bind(Net.java:565) at java.base/sun.nio.ch.DatagramChannelImpl.bindInternal(DatagramChannelImpl.java:1267) at java.base/sun.nio.ch.DatagramChannelImpl.bind(DatagramChannelImpl.java:1237) at java.base/sun.nio.ch.DatagramSocketAdaptor.bind(DatagramSocketAdaptor.java:111) at java.base/java.net.DatagramSocket.createDelegate(DatagramSocket.java:1425) at java.base/java.net.DatagramSocket.<init>(DatagramSocket.java:328) at java.base/java.net.DatagramSocket.<init>(DatagramSocket.java:387) at org.jgroups.util.DefaultSocketFactory.createDatagramSocket(DefaultSocketFactory.java:116) at org.jgroups.protocols.TUNNEL.init(TUNNEL.java:180) at org.jgroups.stack.ProtocolStack.initProtocolStack(ProtocolStack.java:806) at org.jgroups.stack.ProtocolStack.setup(ProtocolStack.java:442) at org.jgroups.JChannel.init(JChannel.java:894) at org.jgroups.JChannel.<init>(JChannel.java:124) at org.jgroups.JChannel.<init>(JChannel.java:105) at org.jgroups.demos.Chat.start(Chat.java:34) at org.jgroups.demos.Chat.main(Chat.java:106)
The reason is that TUNNEL creates a datagram socket for a unique address, but tries to bind to the same port.
Solution: use one of the methods which increment the port until a free port is found to create the datagram socket. Check if requiring a unique address is still needed...
Config {tunnel.xml}} attached to reproduce