This is an automated email from the ASF dual-hosted git repository.
markt-asf pushed a commit to branch 11.0.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git
The following commit(s) were added to refs/heads/11.0.x by this push:
new f71ed94c5a SWitch cluster tests to use automatic ports to avoid
conflicts
f71ed94c5a is described below
commit f71ed94c5ae3e39359933327523b8ea7f9f1f059
Author: Mark Thomas <[email protected]>
AuthorDate: Fri Oct 23 16:28:14 2026 +0100
SWitch cluster tests to use automatic ports to avoid conflicts
I have seen the occasional test failure due to a port conflict
---
.../apache/catalina/tribes/transport/nio/NioReceiver.java | 2 +-
.../catalina/session/TestStandardSessionIntegration.java | 1 +
test/org/apache/catalina/tribes/TesterUtil.java | 13 +++++++++++++
.../catalina/tribes/group/GroupChannelTlsTestBase.java | 6 ++----
.../tribes/group/TestGroupChannelMemberArrival.java | 1 +
.../catalina/tribes/group/TestGroupChannelOptionFlag.java | 2 ++
.../tribes/group/TestGroupChannelSenderConnections.java | 1 +
.../catalina/tribes/group/TestGroupChannelStartStop.java | 8 +++++---
.../group/interceptors/TestDomainFilterInterceptor.java | 2 ++
.../group/interceptors/TestNonBlockingCoordinator.java | 1 +
.../tribes/group/interceptors/TestOrderInterceptor.java | 1 +
.../tribes/group/interceptors/TestTcpFailureDetector.java | 2 ++
.../apache/catalina/tribes/membership/TestMcastService.java | 13 +++++++------
.../catalina/tribes/test/channel/TestDataIntegrity.java | 3 +++
.../catalina/tribes/test/channel/TestMulticastPackages.java | 6 ++++--
.../tribes/test/channel/TestRemoteProcessException.java | 3 +++
.../catalina/tribes/test/channel/TestUdpPackages.java | 6 ++++--
.../catalina/tribes/transport/nio/TestNioReceiver.java | 4 ++--
webapps/docs/config/cluster-receiver.xml | 3 ++-
19 files changed, 57 insertions(+), 21 deletions(-)
diff --git a/java/org/apache/catalina/tribes/transport/nio/NioReceiver.java
b/java/org/apache/catalina/tribes/transport/nio/NioReceiver.java
index 1691977f11..cfd73dc64f 100644
--- a/java/org/apache/catalina/tribes/transport/nio/NioReceiver.java
+++ b/java/org/apache/catalina/tribes/transport/nio/NioReceiver.java
@@ -311,7 +311,7 @@ public class NioReceiver extends ReceiverBase implements
Runnable, NioReceiverMB
serverChannel.register(this.selector.get(),
SelectionKey.OP_ACCEPT);
// set up the datagram channel
- if (this.getUdpPort() > 0) {
+ if (this.getUdpPort() >= 0) {
datagramChannel = DatagramChannel.open();
configureDatagramChannel();
// bind to the address to avoid security checks
diff --git
a/test/org/apache/catalina/session/TestStandardSessionIntegration.java
b/test/org/apache/catalina/session/TestStandardSessionIntegration.java
index 058bb2de30..df1a0210ac 100644
--- a/test/org/apache/catalina/session/TestStandardSessionIntegration.java
+++ b/test/org/apache/catalina/session/TestStandardSessionIntegration.java
@@ -67,6 +67,7 @@ public class TestStandardSessionIntegration extends
TomcatBaseTest {
SimpleTcpCluster cluster = new SimpleTcpCluster();
GroupChannel channel = (GroupChannel) cluster.getChannel();
((ReceiverBase) channel.getChannelReceiver()).setHost("localhost");
+ ((ReceiverBase) channel.getChannelReceiver()).setPort(0);
// Avoid discovering unrelated cluster members and waiting for
their session state.
TesterUtil.addRandomDomain(new ManagedChannel[] { channel });
tomcat.getEngine().setCluster(cluster);
diff --git a/test/org/apache/catalina/tribes/TesterUtil.java
b/test/org/apache/catalina/tribes/TesterUtil.java
index 78458cbd74..6b7dc256ff 100644
--- a/test/org/apache/catalina/tribes/TesterUtil.java
+++ b/test/org/apache/catalina/tribes/TesterUtil.java
@@ -18,6 +18,7 @@ package org.apache.catalina.tribes;
import java.io.IOException;
import java.net.DatagramPacket;
+import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.MulticastSocket;
@@ -38,6 +39,18 @@ public class TesterUtil {
}
+ /*
+ * Returns a UDP port that was free on the loopback interface when it was
checked. Only for ports, such as a
+ * multicast group port, that cannot be left to the operating system
because every member needs to know it in
+ * advance. There is a small window in which another process may take the
port before the caller binds it.
+ */
+ public static int getFreeUdpPort() throws IOException {
+ try (DatagramSocket socket = new DatagramSocket(0,
InetAddress.getLoopbackAddress())) {
+ return socket.getLocalPort();
+ }
+ }
+
+
/*
* Determines whether IP multicast is actually usable in the current
* environment. The tribes membership tests rely on the default
diff --git a/test/org/apache/catalina/tribes/group/GroupChannelTlsTestBase.java
b/test/org/apache/catalina/tribes/group/GroupChannelTlsTestBase.java
index 3a96019fb1..65a8810518 100644
--- a/test/org/apache/catalina/tribes/group/GroupChannelTlsTestBase.java
+++ b/test/org/apache/catalina/tribes/group/GroupChannelTlsTestBase.java
@@ -17,7 +17,6 @@
package org.apache.catalina.tribes.group;
import java.io.Serializable;
-import java.net.ServerSocket;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
@@ -105,9 +104,8 @@ public class GroupChannelTlsTestBase {
channel.setPskDigest(digest);
ReceiverBase receiver = (ReceiverBase) channel.getChannelReceiver();
receiver.setHost("localhost");
- try (ServerSocket socket = new ServerSocket(0)) {
- receiver.setSecurePort(socket.getLocalPort());
- }
+ receiver.setPort(0);
+ receiver.setSecurePort(0);
return channel;
}
}
diff --git
a/test/org/apache/catalina/tribes/group/TestGroupChannelMemberArrival.java
b/test/org/apache/catalina/tribes/group/TestGroupChannelMemberArrival.java
index 58f9af09be..53cc202903 100644
--- a/test/org/apache/catalina/tribes/group/TestGroupChannelMemberArrival.java
+++ b/test/org/apache/catalina/tribes/group/TestGroupChannelMemberArrival.java
@@ -43,6 +43,7 @@ public class TestGroupChannelMemberArrival {
for (int i = 0; i < channels.length; i++) {
channels[i] = new GroupChannel();
((ReceiverBase)
channels[i].getChannelReceiver()).setHost("localhost");
+ ((ReceiverBase) channels[i].getChannelReceiver()).setPort(0);
channels[i].getMembershipService().setPayload( ("Channel-" + (i +
1)).getBytes("ASCII"));
listeners[i] = new TestMbrListener( ("Listener-" + (i + 1)));
channels[i].addMembershipListener(listeners[i]);
diff --git
a/test/org/apache/catalina/tribes/group/TestGroupChannelOptionFlag.java
b/test/org/apache/catalina/tribes/group/TestGroupChannelOptionFlag.java
index 37701b576b..3af119e7fe 100644
--- a/test/org/apache/catalina/tribes/group/TestGroupChannelOptionFlag.java
+++ b/test/org/apache/catalina/tribes/group/TestGroupChannelOptionFlag.java
@@ -24,6 +24,7 @@ import org.junit.Test;
import org.apache.catalina.tribes.Channel;
import org.apache.catalina.tribes.ChannelException;
import org.apache.catalina.tribes.ChannelInterceptor;
+import org.apache.catalina.tribes.transport.ReceiverBase;
import org.apache.tomcat.util.res.StringManager;
public class TestGroupChannelOptionFlag {
@@ -33,6 +34,7 @@ public class TestGroupChannelOptionFlag {
@Before
public void setUp() throws Exception {
channel = new GroupChannel();
+ ((ReceiverBase) channel.getChannelReceiver()).setPort(0);
}
@After
diff --git
a/test/org/apache/catalina/tribes/group/TestGroupChannelSenderConnections.java
b/test/org/apache/catalina/tribes/group/TestGroupChannelSenderConnections.java
index 9e4ce212b4..e2eadad408 100644
---
a/test/org/apache/catalina/tribes/group/TestGroupChannelSenderConnections.java
+++
b/test/org/apache/catalina/tribes/group/TestGroupChannelSenderConnections.java
@@ -48,6 +48,7 @@ public class TestGroupChannelSenderConnections extends
LoggingBaseTest {
for (int i = 0; i < channels.length; i++) {
channels[i] = new GroupChannel();
((ReceiverBase)
channels[i].getChannelReceiver()).setHost("localhost");
+ ((ReceiverBase) channels[i].getChannelReceiver()).setPort(0);
channels[i].getMembershipService().setPayload( ("Channel-" + (i +
1)).getBytes("ASCII"));
listeners[i] = new TestMsgListener( ("Listener-" + (i + 1)));
channels[i].addChannelListener(listeners[i]);
diff --git
a/test/org/apache/catalina/tribes/group/TestGroupChannelStartStop.java
b/test/org/apache/catalina/tribes/group/TestGroupChannelStartStop.java
index 1dcf65275b..0ed5350f44 100644
--- a/test/org/apache/catalina/tribes/group/TestGroupChannelStartStop.java
+++ b/test/org/apache/catalina/tribes/group/TestGroupChannelStartStop.java
@@ -32,12 +32,12 @@ import
org.apache.catalina.tribes.transport.ReplicationTransmitter;
public class TestGroupChannelStartStop {
private GroupChannel channel = null;
- private int udpPort = 45543;
@Before
public void setUp() throws Exception {
channel = new GroupChannel();
((ReceiverBase) channel.getChannelReceiver()).setHost("localhost");
+ ((ReceiverBase) channel.getChannelReceiver()).setPort(0);
}
@After
@@ -189,7 +189,7 @@ public class TestGroupChannelStartStop {
// start one service, then start everything: the already
// started service must not be started a second time
ReceiverBase rb = (ReceiverBase) channel.getChannelReceiver();
- rb.setPort(45588);
+ rb.setPort(0);
// one bind attempt only, so a second start on the same port fails
rb.setAutoBind(0);
int count = 0;
@@ -197,6 +197,8 @@ public class TestGroupChannelStartStop {
channel.start(Channel.SND_RX_SEQ);
count++;
} catch ( Exception x){x.printStackTrace();}
+ // Pin the port the first start was given so that a second bind
attempt would fail
+ rb.setPort(rb.getBoundPort());
try {
channel.start(Channel.DEFAULT);
count++;
@@ -250,7 +252,7 @@ public class TestGroupChannelStartStop {
@Test
public void testUdpReceiverStart() throws Exception {
ReceiverBase rb = (ReceiverBase)channel.getChannelReceiver();
- rb.setUdpPort(udpPort);
+ rb.setUdpPort(0);
channel.start(Channel.DEFAULT);
Thread.sleep(1000);
channel.stop(Channel.DEFAULT);
diff --git
a/test/org/apache/catalina/tribes/group/interceptors/TestDomainFilterInterceptor.java
b/test/org/apache/catalina/tribes/group/interceptors/TestDomainFilterInterceptor.java
index 4def88c6ec..213af17ced 100644
---
a/test/org/apache/catalina/tribes/group/interceptors/TestDomainFilterInterceptor.java
+++
b/test/org/apache/catalina/tribes/group/interceptors/TestDomainFilterInterceptor.java
@@ -30,6 +30,7 @@ import org.apache.catalina.tribes.Member;
import org.apache.catalina.tribes.MembershipListener;
import org.apache.catalina.tribes.TesterUtil;
import org.apache.catalina.tribes.group.GroupChannel;
+import org.apache.catalina.tribes.transport.ReceiverBase;
import org.apache.catalina.tribes.util.UUIDGenerator;
public class TestDomainFilterInterceptor {
@@ -43,6 +44,7 @@ public class TestDomainFilterInterceptor {
TesterUtil.isMulticastAvailable());
for (int i = 0; i < channels.length; i++) {
channels[i] = new GroupChannel();
+ ((ReceiverBase) channels[i].getChannelReceiver()).setPort(0);
channels[i].getMembershipService().setPayload( ("Channel-" + (i +
1)).getBytes("ASCII"));
listeners[i] = new TestMbrListener( ("Listener-" + (i + 1)));
channels[i].addMembershipListener(listeners[i]);
diff --git
a/test/org/apache/catalina/tribes/group/interceptors/TestNonBlockingCoordinator.java
b/test/org/apache/catalina/tribes/group/interceptors/TestNonBlockingCoordinator.java
index 3c61c0952c..dbb5d1318f 100644
---
a/test/org/apache/catalina/tribes/group/interceptors/TestNonBlockingCoordinator.java
+++
b/test/org/apache/catalina/tribes/group/interceptors/TestNonBlockingCoordinator.java
@@ -56,6 +56,7 @@ public class TestNonBlockingCoordinator {
for ( int i=0; i<CHANNEL_COUNT; i++ ) {
channels[i] = new GroupChannel();
((ReceiverBase)
channels[i].getChannelReceiver()).setHost("localhost");
+ ((ReceiverBase) channels[i].getChannelReceiver()).setPort(0);
coordinators[i] = new NonBlockingCoordinator();
channels[i].addInterceptor(coordinators[i]);
TcpFailureDetector tcpFailureDetector = new
TcpFailureDetector();
diff --git
a/test/org/apache/catalina/tribes/group/interceptors/TestOrderInterceptor.java
b/test/org/apache/catalina/tribes/group/interceptors/TestOrderInterceptor.java
index 35398458a2..f0590533f9 100644
---
a/test/org/apache/catalina/tribes/group/interceptors/TestOrderInterceptor.java
+++
b/test/org/apache/catalina/tribes/group/interceptors/TestOrderInterceptor.java
@@ -60,6 +60,7 @@ public class TestOrderInterceptor {
for ( int i=0; i<channelCount; i++ ) {
channels[i] = new GroupChannel();
((ReceiverBase)
channels[i].getChannelReceiver()).setHost("localhost");
+ ((ReceiverBase) channels[i].getChannelReceiver()).setPort(0);
orderitcs[i] = new OrderInterceptor();
mangleitcs[i] = new MangleOrderInterceptor();
orderitcs[i].setExpire(Long.MAX_VALUE);
diff --git
a/test/org/apache/catalina/tribes/group/interceptors/TestTcpFailureDetector.java
b/test/org/apache/catalina/tribes/group/interceptors/TestTcpFailureDetector.java
index fdcd7d6345..1f1e117c80 100644
---
a/test/org/apache/catalina/tribes/group/interceptors/TestTcpFailureDetector.java
+++
b/test/org/apache/catalina/tribes/group/interceptors/TestTcpFailureDetector.java
@@ -49,7 +49,9 @@ public class TestTcpFailureDetector {
channel1 = new GroupChannel();
channel2 = new GroupChannel();
((ReceiverBase) channel1.getChannelReceiver()).setHost("localhost");
+ ((ReceiverBase) channel1.getChannelReceiver()).setPort(0);
((ReceiverBase) channel2.getChannelReceiver()).setHost("localhost");
+ ((ReceiverBase) channel2.getChannelReceiver()).setPort(0);
channel1.getMembershipService().setPayload("Channel-1".getBytes("ASCII"));
channel2.getMembershipService().setPayload("Channel-2".getBytes("ASCII"));
mbrlist1 = new TestMbrListener("Channel-1");
diff --git a/test/org/apache/catalina/tribes/membership/TestMcastService.java
b/test/org/apache/catalina/tribes/membership/TestMcastService.java
index 325f9e3bf4..1aada231b6 100644
--- a/test/org/apache/catalina/tribes/membership/TestMcastService.java
+++ b/test/org/apache/catalina/tribes/membership/TestMcastService.java
@@ -24,6 +24,7 @@ import org.junit.Test;
import org.apache.catalina.tribes.Channel;
import org.apache.catalina.tribes.ChannelException;
+import org.apache.catalina.tribes.TesterUtil;
import org.apache.catalina.tribes.group.GroupChannel;
import org.apache.catalina.tribes.io.ChannelData;
import org.apache.catalina.tribes.io.XByteBuffer;
@@ -37,12 +38,12 @@ public class TestMcastService {
*/
@Test(timeout = 60000)
public void testStopWithFailingShutdownSendCompletes() throws Exception {
- int base = 40000 + Math.floorMod(System.nanoTime(), 10000);
+ int mcastPort = TesterUtil.getFreeUdpPort();
StringBuilder properties = new StringBuilder();
properties.append("mcastAddress=228.0.0.4\n");
- properties.append("mcastPort=").append(base).append("\n");
+ properties.append("mcastPort=").append(mcastPort).append("\n");
properties.append("tcpListenHost=127.0.0.1\n");
- properties.append("tcpListenPort=").append(base + 1).append("\n");
+ properties.append("tcpListenPort=").append(0).append("\n");
properties.append("tcpSecurePort=0\n");
properties.append("udpListenPort=0\n");
properties.append("mcastFrequency=100\n");
@@ -167,12 +168,12 @@ public class TestMcastService {
*/
@Test(timeout = 60000)
public void testBroadcastRejectsPacketsTheSocketCannotCarry() throws
Exception {
- int base = 40000 + Math.floorMod(System.nanoTime(), 10000);
+ int mcastPort = TesterUtil.getFreeUdpPort();
Properties props = new Properties();
props.setProperty("mcastAddress", "228.0.0.4");
- props.setProperty("mcastPort", String.valueOf(base));
+ props.setProperty("mcastPort", String.valueOf(mcastPort));
props.setProperty("tcpListenHost", "127.0.0.1");
- props.setProperty("tcpListenPort", String.valueOf(base + 1));
+ props.setProperty("tcpListenPort", "0");
props.setProperty("tcpSecurePort", "0");
props.setProperty("udpListenPort", "0");
props.setProperty("mcastFrequency", "100");
diff --git
a/test/org/apache/catalina/tribes/test/channel/TestDataIntegrity.java
b/test/org/apache/catalina/tribes/test/channel/TestDataIntegrity.java
index 3da336f4f1..70f4592c22 100644
--- a/test/org/apache/catalina/tribes/test/channel/TestDataIntegrity.java
+++ b/test/org/apache/catalina/tribes/test/channel/TestDataIntegrity.java
@@ -32,6 +32,7 @@ import org.apache.catalina.tribes.Member;
import org.apache.catalina.tribes.TesterUtil;
import org.apache.catalina.tribes.group.GroupChannel;
import
org.apache.catalina.tribes.group.interceptors.MessageDispatchInterceptor;
+import org.apache.catalina.tribes.transport.ReceiverBase;
public class TestDataIntegrity {
private int msgCount = 500;
@@ -43,8 +44,10 @@ public class TestDataIntegrity {
@Before
public void setUp() throws Exception {
channel1 = new GroupChannel();
+ ((ReceiverBase) channel1.getChannelReceiver()).setPort(0);
channel1.addInterceptor(new MessageDispatchInterceptor());
channel2 = new GroupChannel();
+ ((ReceiverBase) channel2.getChannelReceiver()).setPort(0);
channel2.addInterceptor(new MessageDispatchInterceptor());
listener1 = new Listener();
channel2.addChannelListener(listener1);
diff --git
a/test/org/apache/catalina/tribes/test/channel/TestMulticastPackages.java
b/test/org/apache/catalina/tribes/test/channel/TestMulticastPackages.java
index 0faee86a88..c7fb989de4 100644
--- a/test/org/apache/catalina/tribes/test/channel/TestMulticastPackages.java
+++ b/test/org/apache/catalina/tribes/test/channel/TestMulticastPackages.java
@@ -53,8 +53,10 @@ public class TestMulticastPackages {
@Before
public void setUp() throws Exception {
channel1 = new GroupChannel();
+ ((ReceiverBase) channel1.getChannelReceiver()).setPort(0);
channel1.addInterceptor(new MessageDispatchInterceptor());
channel2 = new GroupChannel();
+ ((ReceiverBase) channel2.getChannelReceiver()).setPort(0);
channel2.addInterceptor(new MessageDispatchInterceptor());
ThroughputInterceptor tint = new ThroughputInterceptor();
tint.setInterval(500);
@@ -65,8 +67,8 @@ public class TestMulticastPackages {
listener1 = new Listener();
ReceiverBase rb1 = (ReceiverBase)channel1.getChannelReceiver();
ReceiverBase rb2 = (ReceiverBase)channel2.getChannelReceiver();
- rb1.setUdpPort(50000);
- rb2.setUdpPort(50000);
+ rb1.setUdpPort(0);
+ rb2.setUdpPort(0);
channel2.addChannelListener(listener1);
TesterUtil.addRandomDomain(new ManagedChannel[] {channel1, channel2});
channel1.start(Channel.DEFAULT);
diff --git
a/test/org/apache/catalina/tribes/test/channel/TestRemoteProcessException.java
b/test/org/apache/catalina/tribes/test/channel/TestRemoteProcessException.java
index 587699e865..d3ec4635ae 100644
---
a/test/org/apache/catalina/tribes/test/channel/TestRemoteProcessException.java
+++
b/test/org/apache/catalina/tribes/test/channel/TestRemoteProcessException.java
@@ -33,6 +33,7 @@ import org.apache.catalina.tribes.ManagedChannel;
import org.apache.catalina.tribes.Member;
import org.apache.catalina.tribes.TesterUtil;
import org.apache.catalina.tribes.group.GroupChannel;
+import org.apache.catalina.tribes.transport.ReceiverBase;
public class TestRemoteProcessException {
private int msgCount = 10000;
@@ -43,7 +44,9 @@ public class TestRemoteProcessException {
@Before
public void setUp() throws Exception {
channel1 = new GroupChannel();
+ ((ReceiverBase) channel1.getChannelReceiver()).setPort(0);
channel2 = new GroupChannel();
+ ((ReceiverBase) channel2.getChannelReceiver()).setPort(0);
listener1 = new Listener();
channel2.addChannelListener(listener1);
TesterUtil.addRandomDomain(new ManagedChannel[] {channel1, channel2});
diff --git a/test/org/apache/catalina/tribes/test/channel/TestUdpPackages.java
b/test/org/apache/catalina/tribes/test/channel/TestUdpPackages.java
index bdb7078f8c..1bb6a0b157 100644
--- a/test/org/apache/catalina/tribes/test/channel/TestUdpPackages.java
+++ b/test/org/apache/catalina/tribes/test/channel/TestUdpPackages.java
@@ -53,8 +53,10 @@ public class TestUdpPackages {
@Before
public void setUp() throws Exception {
channel1 = new GroupChannel();
+ ((ReceiverBase) channel1.getChannelReceiver()).setPort(0);
channel1.addInterceptor(new MessageDispatchInterceptor());
channel2 = new GroupChannel();
+ ((ReceiverBase) channel2.getChannelReceiver()).setPort(0);
channel2.addInterceptor(new MessageDispatchInterceptor());
ThroughputInterceptor tint = new ThroughputInterceptor();
tint.setInterval(500);
@@ -65,8 +67,8 @@ public class TestUdpPackages {
listener1 = new Listener();
ReceiverBase rb1 = (ReceiverBase)channel1.getChannelReceiver();
ReceiverBase rb2 = (ReceiverBase)channel2.getChannelReceiver();
- rb1.setUdpPort(50000);
- rb2.setUdpPort(50000);
+ rb1.setUdpPort(0);
+ rb2.setUdpPort(0);
channel2.addChannelListener(listener1);
TesterUtil.addRandomDomain(new ManagedChannel[] {channel1, channel2});
channel1.start(Channel.DEFAULT);
diff --git a/test/org/apache/catalina/tribes/transport/nio/TestNioReceiver.java
b/test/org/apache/catalina/tribes/transport/nio/TestNioReceiver.java
index b931ba0c44..552d3daa84 100644
--- a/test/org/apache/catalina/tribes/transport/nio/TestNioReceiver.java
+++ b/test/org/apache/catalina/tribes/transport/nio/TestNioReceiver.java
@@ -124,7 +124,7 @@ public class TestNioReceiver {
receiver.setChannel(new GroupChannel());
receiver.setAddress("127.0.0.1");
receiver.setPort(0);
- receiver.setUdpPort(45678);
+ receiver.setUdpPort(0);
receiver.bind();
Field field = NioReceiver.class.getDeclaredField("datagramChannel");
field.setAccessible(true);
@@ -249,7 +249,7 @@ public class TestNioReceiver {
receiver.setChannel(new GroupChannel());
receiver.setAddress("127.0.0.1");
receiver.setPort(0);
- receiver.setUdpPort(45678);
+ receiver.setUdpPort(0);
try {
receiver.bind();
Field field =
NioReceiver.class.getDeclaredField("datagramChannel");
diff --git a/webapps/docs/config/cluster-receiver.xml
b/webapps/docs/config/cluster-receiver.xml
index c6983cc480..a47584a62a 100644
--- a/webapps/docs/config/cluster-receiver.xml
+++ b/webapps/docs/config/cluster-receiver.xml
@@ -95,7 +95,8 @@
</attribute>
<attribute name="udpPort" required="false">
The UDP listen port. If this attribute is omitted no UDP port is opened
up.
- The default value is unset, meaning there is no UDP listener available.
+ The default value is unset, meaning there is no UDP listener available.
A value of <code>0</code> lets the
+ operating system select a free port.
As with <code>port</code>, auto-binding does not change the configured
value; the port actually bound is
available via the read-only <code>boundUdpPort</code> property.
</attribute>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]