diff --git a/src/main/java/org/qora/network/Network.java b/src/main/java/org/qora/network/Network.java index 0916422a..b5321812 100644 --- a/src/main/java/org/qora/network/Network.java +++ b/src/main/java/org/qora/network/Network.java @@ -963,10 +963,8 @@ public class Network extends Thread { } // Close all peer connections - synchronized (this.connectedPeers) { - for (Peer peer : this.connectedPeers) - peer.shutdown(); - } + for (Peer peer : this.getConnectedPeers()) + peer.shutdown(); } } diff --git a/src/main/java/org/qora/network/Peer.java b/src/main/java/org/qora/network/Peer.java index 61bb5d47..69aec170 100644 --- a/src/main/java/org/qora/network/Peer.java +++ b/src/main/java/org/qora/network/Peer.java @@ -1,6 +1,7 @@ package org.qora.network; import java.io.DataInputStream; +import java.io.EOFException; import java.io.IOException; import java.io.OutputStream; import java.net.InetAddress; @@ -369,10 +370,20 @@ public class Peer extends Thread { } catch (SocketTimeoutException e) { this.disconnect("timeout"); } catch (IOException e) { - if (isStopping) + if (isStopping) { + // If isStopping is true then our shutdown() has already been called, so no need to call it again LOGGER.debug(String.format("Peer %s stopping...", this)); - else + return; + } + + // More informative logging + if (e instanceof EOFException) { + this.disconnect("EOF"); + } else if (e.getMessage().contains("onnection reset")) { // Can't import/rely on sun.net.ConnectionResetException + this.disconnect("Connection reset"); + } else { this.disconnect("I/O error"); + } } finally { Thread.currentThread().setName("disconnected peer"); }