diff --git a/src/main/java/org/qortal/controller/arbitrary/ArbitraryDataFileManager.java b/src/main/java/org/qortal/controller/arbitrary/ArbitraryDataFileManager.java index 5d298c92..d2ab6b87 100644 --- a/src/main/java/org/qortal/controller/arbitrary/ArbitraryDataFileManager.java +++ b/src/main/java/org/qortal/controller/arbitrary/ArbitraryDataFileManager.java @@ -253,7 +253,23 @@ public class ArbitraryDataFileManager { int index = new SecureRandom().nextInt(peers.size()); ArbitraryPeerData arbitraryPeerData = peers.get(index); String peerAddressString = arbitraryPeerData.getPeerAddress(); - return Network.getInstance().requestDataFromPeer(peerAddressString, signature); + boolean success = Network.getInstance().requestDataFromPeer(peerAddressString, signature); + + // If using a non-standard port, try a second connection with the default listen port, since almost all nodes use that + // This is a workaround to account for any ephemeral ports that may have made it into the dataset + boolean success2 = false; + String[] parts = peerAddressString.split(":"); + if (parts.length > 1) { + String host = parts[0]; + int port = Integer.parseInt(parts[1]); + int defaultPort = Settings.getInstance().getDefaultListenPort(); + if (port != defaultPort) { + String newPeerAddressString = String.format("%s:%d", host, defaultPort); + success2 = Network.getInstance().requestDataFromPeer(newPeerAddressString, signature); + } + } + + return success || success2; } catch (DataException e) { LOGGER.debug("Unable to fetch peer list from repository");