diff --git a/core/src/main/java/com/google/bitcoin/core/PeerGroup.java b/core/src/main/java/com/google/bitcoin/core/PeerGroup.java index 5cb0f0b4..c091aee9 100644 --- a/core/src/main/java/com/google/bitcoin/core/PeerGroup.java +++ b/core/src/main/java/com/google/bitcoin/core/PeerGroup.java @@ -691,7 +691,13 @@ public class PeerGroup extends AbstractIdleService implements TransactionBroadca peer.setMinProtocolVersion(vMinRequiredProtocolVersion); pendingPeers.add(peer); - channels.openConnection(address, peer); + try { + channels.openConnection(address, peer); + } catch (Exception e) { + log.warn("Failed to connect to " + address + ": " + e.getMessage()); + handlePeerDeath(peer); + return null; + } peer.setSocketTimeout(vConnectTimeoutMillis); // When the channel has connected and version negotiated successfully, handleNewPeer will end up being called on // a worker thread. diff --git a/core/src/main/java/com/google/bitcoin/networkabstraction/ConnectionHandler.java b/core/src/main/java/com/google/bitcoin/networkabstraction/ConnectionHandler.java index b8c72128..eb1fa522 100644 --- a/core/src/main/java/com/google/bitcoin/networkabstraction/ConnectionHandler.java +++ b/core/src/main/java/com/google/bitcoin/networkabstraction/ConnectionHandler.java @@ -211,7 +211,7 @@ class ConnectionHandler implements MessageWriteTarget { } catch (Exception e) { // This can happen eg if the channel closes while the thread is about to get killed // (ClosedByInterruptException), or if handler.parser.receiveBytes throws something - log.error("Error handling SelectionKey", e); + log.error("Error handling SelectionKey: " + e.getMessage()); if (handler != null) handler.closeConnection(); } diff --git a/core/src/main/java/com/google/bitcoin/networkabstraction/NioClientManager.java b/core/src/main/java/com/google/bitcoin/networkabstraction/NioClientManager.java index 1ade70df..55bfc3ec 100644 --- a/core/src/main/java/com/google/bitcoin/networkabstraction/NioClientManager.java +++ b/core/src/main/java/com/google/bitcoin/networkabstraction/NioClientManager.java @@ -64,11 +64,11 @@ public class NioClientManager extends AbstractExecutionThreadService implements } } catch (IOException e) { // Calling sc.socket().getRemoteSocketAddress() here throws an exception, so we can only log the error itself - log.error("Failed to connect with exception", e); + log.error("Failed to connect with exception: {}", e.getMessage()); handler.closeConnection(); } catch (CancelledKeyException e) { // There is a race to get to interestOps after finishConnect() which may cause this // Calling sc.socket().getRemoteSocketAddress() here throws an exception, so we can only log the error itself - log.error("Failed to connect with exception", e); + log.error("Failed to connect with exception: {}", e.getMessage()); handler.closeConnection(); } } else // Process bytes read