diff options
| author | 2026-08-04 22:10:19 +0200 | |
|---|---|---|
| committer | 2026-08-04 22:10:19 +0200 | |
| commit | 5889df5c5e80c943aba93829857aeca780643947 (patch) | |
| tree | bfe1ea21c621489ea3ef438830b785cfb68f6e9c /src | |
| parent | 82013ee45cb8258487952de6d0a20fa66876bfbf (diff) | |
Revert "Use SocketChannel for better timeout control"
This reverts commit 82013ee45cb8258487952de6d0a20fa66876bfbf.
Unfortunatetly turns out that NIO does a much worser job with virtual threads
Diffstat (limited to 'src')
| -rw-r--r-- | src/main/java/com/it_jaros/jscanner/Scanner.java | 34 |
1 files changed, 5 insertions, 29 deletions
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); |
