From aa621021e293652093b8b64fd0aaa2805dffa5e6 Mon Sep 17 00:00:00 2001 From: NitrinCloud <113344017+NitrinCloud@users.noreply.github.com> Date: Sat, 7 Jan 2023 08:39:32 +0100 Subject: [PATCH] Support dynamic selection of a port using '0' (#1661) --- .../minestom/server/network/socket/Server.java | 4 ++++ .../server/network/socket/ServerAddressTest.java | 15 ++++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/minestom/server/network/socket/Server.java b/src/main/java/net/minestom/server/network/socket/Server.java index 68f0189e4..88dd5393e 100644 --- a/src/main/java/net/minestom/server/network/socket/Server.java +++ b/src/main/java/net/minestom/server/network/socket/Server.java @@ -63,6 +63,10 @@ public final class Server { server.register(selector, SelectionKey.OP_ACCEPT); this.serverSocket = server; this.socketAddress = address; + + if (address instanceof InetSocketAddress && port == 0) { + port = server.socket().getLocalPort(); + } } @ApiStatus.Internal diff --git a/src/test/java/net/minestom/server/network/socket/ServerAddressTest.java b/src/test/java/net/minestom/server/network/socket/ServerAddressTest.java index 931fb9600..1836cf2b6 100644 --- a/src/test/java/net/minestom/server/network/socket/ServerAddressTest.java +++ b/src/test/java/net/minestom/server/network/socket/ServerAddressTest.java @@ -14,7 +14,7 @@ public class ServerAddressTest { @Test public void inetAddressTest() throws IOException { - InetSocketAddress address = new InetSocketAddress("localhost", 0); + InetSocketAddress address = new InetSocketAddress("localhost", 25565); var server = new Server(new PacketProcessor()); server.init(address); assertSame(address, server.socketAddress()); @@ -25,6 +25,19 @@ public class ServerAddressTest { assertDoesNotThrow(server::stop); } + @Test + public void inetAddressDynamicTest() throws IOException { + InetSocketAddress address = new InetSocketAddress("localhost", 0); + var server = new Server(new PacketProcessor()); + server.init(address); + assertSame(address, server.socketAddress()); + assertEquals(address.getHostString(), server.getAddress()); + assertNotEquals(address.getPort(), server.getPort()); + + assertDoesNotThrow(server::start); + assertDoesNotThrow(server::stop); + } + @Test public void unixAddressTest() throws IOException { UnixDomainSocketAddress address = UnixDomainSocketAddress.of("minestom.sock");