From ac649d2b2f84923da29ea5ce14ee0247086dc33d Mon Sep 17 00:00:00 2001 From: Matthias Jaros Date: Sun, 30 Aug 2026 22:25:48 +0200 Subject: Fix bug wrong primitive used for recv method that needs long instead of int --- src/main/java/com/it_jaros/jns/scan/ExceptionInfo.java | 2 ++ .../java/com/it_jaros/jns/scan/engine/ScanUdpPortTask.java | 2 +- .../jns/scan/engine/platform/linux/LinuxUdpSocketAPI.java | 10 +++++----- 3 files changed, 8 insertions(+), 6 deletions(-) (limited to 'src/main/java/com/it_jaros') diff --git a/src/main/java/com/it_jaros/jns/scan/ExceptionInfo.java b/src/main/java/com/it_jaros/jns/scan/ExceptionInfo.java index cdbf741..417ea23 100644 --- a/src/main/java/com/it_jaros/jns/scan/ExceptionInfo.java +++ b/src/main/java/com/it_jaros/jns/scan/ExceptionInfo.java @@ -10,6 +10,8 @@ public record ExceptionInfo( return ExceptionInfo.from(cause); } + // for debugging only + //t.printStackTrace(); return new ExceptionInfo( t.getClass().getName(), t.getMessage() diff --git a/src/main/java/com/it_jaros/jns/scan/engine/ScanUdpPortTask.java b/src/main/java/com/it_jaros/jns/scan/engine/ScanUdpPortTask.java index 21b93f8..0c1b9e0 100644 --- a/src/main/java/com/it_jaros/jns/scan/engine/ScanUdpPortTask.java +++ b/src/main/java/com/it_jaros/jns/scan/engine/ScanUdpPortTask.java @@ -81,7 +81,7 @@ public class ScanUdpPortTask implements Callable { MemorySegment recvBuffer = arena.allocate(RECV_BUFFER_SIZE); try { - int bytesRead = linuxUdpSocketAPI.recv(fd, recvBuffer); + long bytesRead = linuxUdpSocketAPI.recv(fd, recvBuffer); if (bytesRead >= 0) { return PortState.OPEN; } diff --git a/src/main/java/com/it_jaros/jns/scan/engine/platform/linux/LinuxUdpSocketAPI.java b/src/main/java/com/it_jaros/jns/scan/engine/platform/linux/LinuxUdpSocketAPI.java index fe087d7..bbd2009 100644 --- a/src/main/java/com/it_jaros/jns/scan/engine/platform/linux/LinuxUdpSocketAPI.java +++ b/src/main/java/com/it_jaros/jns/scan/engine/platform/linux/LinuxUdpSocketAPI.java @@ -15,7 +15,6 @@ public class LinuxUdpSocketAPI { public static final int AF_INET6 = 10; public static final int EAGAIN = 11; public static final int ECONNREFUSED = 111; - public static final int EWOULDBLOCK = 11; public static final int SOCK_DGRAM = 2; public static final int SOL_SOCKET = 1; public static final int SO_RCVTIMEO = 20; @@ -117,7 +116,7 @@ public class LinuxUdpSocketAPI { System.arraycopy(argv, 0, newArgv, 1, argv.length); try { final T rc = callNativeMethod(methodHandle, newArgv); - if (rc.intValue() < 0) { + if (rc.longValue() < 0) { throw new RawLinuxSocketException(methodHandle.toString(), errno(state)); } return rc; @@ -144,11 +143,12 @@ public class LinuxUdpSocketAPI { } public void sendEmptyDatagram(int fd) throws IOException { - wrapNativeMethodCall(SEND, fd, MemorySegment.NULL, 0L, 0); + MemorySegment buffer = arena.allocate(1L); + wrapNativeMethodCall(SEND, fd, buffer, buffer.byteSize(), 0); } - public int recv(int fd, MemorySegment buffer) throws IOException { - return wrapNativeMethodCall(RECV, fd, buffer, (int) buffer.byteSize(), 0); + public long recv(int fd, MemorySegment buffer) throws IOException { + return wrapNativeMethodCall(RECV, fd, buffer, buffer.byteSize(), 0); } public void setReceiveTimeout(int fd, long timeoutInMillis) throws IOException { -- cgit v1.3.1-4-g156e