From 5889df5c5e80c943aba93829857aeca780643947 Mon Sep 17 00:00:00 2001 From: Matthias Jaros Date: Tue, 4 Aug 2026 22:10:19 +0200 Subject: Revert "Use SocketChannel for better timeout control" This reverts commit 82013ee45cb8258487952de6d0a20fa66876bfbf. Unfortunatetly turns out that NIO does a much worser job with virtual threads --- src/main/java/com/it_jaros/jscanner/Scanner.java | 34 ++++-------------------- 1 file changed, 5 insertions(+), 29 deletions(-) (limited to 'src') diff --git a/src/main/java/com/it_jaros/jscanner/Scanner.java b/src/main/java/com/it_jaros/jscanner/Scanner.java index 5277327..9f5ac52 100644 --- a/src/main/java/com/it_jaros/jscanner/Scanner.java +++ b/src/main/java/com/it_jaros/jscanner/Scanner.java @@ -3,9 +3,6 @@ package com.it_jaros.jscanner; import java.io.IOException; import java.io.InputStream; import java.net.*; -import java.nio.channels.SelectionKey; -import java.nio.channels.Selector; -import java.nio.channels.SocketChannel; import java.nio.charset.StandardCharsets; import java.time.Duration; import java.util.*; @@ -350,32 +347,11 @@ public class Scanner implements AutoCloseable { socketLimit.acquire(); scan.socketStart(); - try( - SocketChannel socketChannel = SocketChannel.open(); - Selector isOpen = Selector.open() - ) { - socketChannel.configureBlocking(false); - SelectionKey isOpenKey = socketChannel.register(isOpen, SelectionKey.OP_CONNECT); - socketChannel.connect(new InetSocketAddress(host, port)); - long deadlineNanos = System.nanoTime() + TimeUnit.MILLISECONDS.toNanos(timeoutInMillis); - long waitInMillis = Math.min(timeoutInMillis, 5); - while (isOpenKey.isValid() && !isOpenKey.isConnectable()) { - if (isOpen.select(waitInMillis) == 1) { - if (socketChannel.finishConnect()) { - result.setState(PortState.OPEN); - //if (bannerRecognition) { - // result.setBanner(getBanner(socket)); - //} - } else { - result.setState(PortState.FILTERED); - } - break; - } - - if (deadlineNanos - System.nanoTime() < 0) { - result.setState(PortState.FILTERED); - break; - } + try (Socket socket = new Socket()) { + socket.connect(new InetSocketAddress(host, port), timeoutInMillis); + result.setState(PortState.OPEN); + if (bannerRecognition) { + result.setBanner(getBanner(socket)); } } catch (SocketTimeoutException ignored) { result.setState(PortState.FILTERED); -- cgit v1.3.1