From eefe4c73484d39ffd0856ed446df1a76e5f69e0c Mon Sep 17 00:00:00 2001 From: Matthias Jaros Date: Sun, 2 Aug 2026 17:18:57 +0200 Subject: Fixed Scanner hanging long on strg+c --- src/main/java/com/it_jaros/jscanner/Scan.java | 1 + src/main/java/com/it_jaros/jscanner/Scanner.java | 8 +++++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/it_jaros/jscanner/Scan.java b/src/main/java/com/it_jaros/jscanner/Scan.java index d276fd2..d58e8d0 100644 --- a/src/main/java/com/it_jaros/jscanner/Scan.java +++ b/src/main/java/com/it_jaros/jscanner/Scan.java @@ -8,6 +8,7 @@ import java.nio.file.Path; import java.util.List; import java.util.stream.Stream; +// todo object/data asymmetry /** * Object holder for stateful volatile data during scan */ diff --git a/src/main/java/com/it_jaros/jscanner/Scanner.java b/src/main/java/com/it_jaros/jscanner/Scanner.java index 337f5ed..b35161f 100644 --- a/src/main/java/com/it_jaros/jscanner/Scanner.java +++ b/src/main/java/com/it_jaros/jscanner/Scanner.java @@ -316,6 +316,9 @@ public class Scanner implements AutoCloseable { return; } synchronized (lock) { + if (cancelled) { + return; + } long now = System.nanoTime(); if (nextAllowedTime > now) { Thread.sleep(Duration.ofNanos(nextAllowedTime - now)); @@ -343,9 +346,9 @@ public class Scanner implements AutoCloseable { public PortResult call() throws Exception { try { scan.getThreadCounter().inc(); - portScanRateLimiter.apply(); // per-host serial pacing + portScanRateLimiter.apply(); if (cancelled) { - return null; + return new PortResult(); } return checkPort(); } finally { @@ -361,7 +364,6 @@ public class Scanner implements AutoCloseable { // don't allow more sockets then specified socketLimit.acquire(); // count how many ports are concurrently checked - // todo object/data asymmetry scan.getSocketCounter().inc(); try (Socket socket = new Socket()) { socket.connect(new InetSocketAddress(host, port), timeoutInMillis); -- cgit v1.3.1