From c17eea3ed9e93d5662cce874ba40212b24377580 Mon Sep 17 00:00:00 2001 From: catbref Date: Sun, 17 Jan 2021 15:32:39 +0000 Subject: [PATCH] Added timeout to Peer sendMessage() - same timeout as for awaiting incoming responses --- src/main/java/org/qortal/network/Peer.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/qortal/network/Peer.java b/src/main/java/org/qortal/network/Peer.java index 84f29ac9..ab8aa1f4 100644 --- a/src/main/java/org/qortal/network/Peer.java +++ b/src/main/java/org/qortal/network/Peer.java @@ -475,6 +475,8 @@ public class Peer { ByteBuffer outputBuffer = ByteBuffer.wrap(message.toBytes()); synchronized (this.socketChannel) { + final long sendStart = System.currentTimeMillis(); + while (outputBuffer.hasRemaining()) { int bytesWritten = this.socketChannel.write(outputBuffer); @@ -484,7 +486,7 @@ public class Peer { message.getId(), this)); - if (bytesWritten == 0) + if (bytesWritten == 0) { // Underlying socket's internal buffer probably full, // so wait a short while for bytes to actually be transmitted over the wire @@ -496,6 +498,11 @@ public class Peer { * and connection loss. */ Thread.sleep(1L); //NOSONAR squid:S2276 + + if (System.currentTimeMillis() - sendStart > RESPONSE_TIMEOUT) + // We've taken too long to send this message + return false; + } } } } catch (MessageException e) {