diff --git a/core/src/main/java/org/netcrusher/tcp/TcpAcceptor.java b/core/src/main/java/org/netcrusher/tcp/TcpAcceptor.java index 6f41246..788541a 100644 --- a/core/src/main/java/org/netcrusher/tcp/TcpAcceptor.java +++ b/core/src/main/java/org/netcrusher/tcp/TcpAcceptor.java @@ -60,7 +60,6 @@ class TcpAcceptor implements NetFreezer { BufferOptions bufferOptions) throws IOException { this.crusher = crusher; - this.bindAddress = bindAddress; this.connectAddress = connectAddress; this.bindBeforeConnectAddress = bindBeforeConnectAddress; this.socketOptions = socketOptions; @@ -79,6 +78,12 @@ class TcpAcceptor implements NetFreezer { this.serverSocketChannel.bind(bindAddress); } + if (bindAddress.getPort() == 0 && serverSocketChannel.getLocalAddress() instanceof InetSocketAddress) { + this.bindAddress = (InetSocketAddress) serverSocketChannel.getLocalAddress(); + } else { + this.bindAddress = bindAddress; + } + this.serverSelectionKey = reactor.getSelector() .register(serverSocketChannel, 0, (selectionKey) -> this.accept()); @@ -252,6 +257,10 @@ public boolean isFrozen() { return state.isAnyOf(State.FROZEN | State.CLOSED); } + public InetSocketAddress getBindAddress() { + return bindAddress; + } + private static final class State extends BitState { private static final int OPEN = bit(0); diff --git a/core/src/main/java/org/netcrusher/tcp/TcpCrusher.java b/core/src/main/java/org/netcrusher/tcp/TcpCrusher.java index a1cf724..6ebb456 100644 --- a/core/src/main/java/org/netcrusher/tcp/TcpCrusher.java +++ b/core/src/main/java/org/netcrusher/tcp/TcpCrusher.java @@ -44,7 +44,7 @@ public class TcpCrusher implements NetCrusher { private static final int DEFAULT_PAIR_CAPACITY = 32; - private final InetSocketAddress bindAddress; + private InetSocketAddress bindAddress; private final InetSocketAddress connectAddress; @@ -128,6 +128,10 @@ public void open() { state.set(State.FROZEN); + if (bindAddress.getPort() == 0) { + this.bindAddress = this.acceptor.getBindAddress(); + } + LOGGER.info("TcpCrusher <{}>-<{}> is open", bindAddress, connectAddress); unfreeze();