diff --git a/bramble-android/src/main/java/org/briarproject/bramble/plugin/tcp/AndroidLanTcpPlugin.java b/bramble-android/src/main/java/org/briarproject/bramble/plugin/tcp/AndroidLanTcpPlugin.java index 1da07f382..46bb20e4a 100644 --- a/bramble-android/src/main/java/org/briarproject/bramble/plugin/tcp/AndroidLanTcpPlugin.java +++ b/bramble-android/src/main/java/org/briarproject/bramble/plugin/tcp/AndroidLanTcpPlugin.java @@ -277,11 +277,11 @@ class AndroidLanTcpPlugin extends LanTcpPlugin { // make outgoing connections on API 21+ if another network // has internet access socketFactory = SocketFactory.getDefault(); - if (s == INACTIVE) bind(); + bind(); } else { LOG.info("Connected to wifi"); socketFactory = getSocketFactory(); - if (s == INACTIVE) bind(); + bind(); } }); } diff --git a/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/TcpPlugin.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/TcpPlugin.java index f381832dc..f67121685 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/TcpPlugin.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/TcpPlugin.java @@ -149,15 +149,21 @@ abstract class TcpPlugin implements DuplexPlugin, EventListener { protected void bind() { bindExecutor.execute(() -> { - if (getState() != INACTIVE) return; + State s = getState(); + if (s != ACTIVE && s != INACTIVE) return; bind(true); bind(false); }); } private void bind(boolean ipv4) { + ServerSocket old = state.getServerSocket(ipv4); ServerSocket ss = null; for (InetSocketAddress addr : getLocalSocketAddresses(ipv4)) { + if (old != null && addr.equals(old.getLocalSocketAddress())) { + LOG.info("Server socket already bound"); + return; + } try { ss = new ServerSocket(); ss.bind(addr);