summaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorGravatar Matthias Jaros <jarlucmat@mailbox.org>2026-08-04 22:10:19 +0200
committerGravatar Matthias Jaros <jarlucmat@mailbox.org>2026-08-04 22:10:19 +0200
commit5889df5c5e80c943aba93829857aeca780643947 (patch)
treebfe1ea21c621489ea3ef438830b785cfb68f6e9c /src/main/java
parent82013ee45cb8258487952de6d0a20fa66876bfbf (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/main/java')
-rw-r--r--src/main/java/com/it_jaros/jscanner/Scanner.java34
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);