diff options
Diffstat (limited to 'src/main')
| -rw-r--r-- | src/main/java/com/it_jaros/jns/scan/engine/ScanUdpPortTask.java | 27 | ||||
| -rw-r--r-- | src/main/java/com/it_jaros/jns/scan/engine/platform/linux/LinuxUdpSocketAPI.java | 1 |
2 files changed, 11 insertions, 17 deletions
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 441fd08..828b61e 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 @@ -83,7 +83,6 @@ public class ScanUdpPortTask implements Callable<PortResult> { linuxUdpSocketAPI.setNonBlocking(fd); linuxUdpSocketAPI.connect(fd, destination); linuxUdpSocketAPI.sendEmptyDatagram(fd); - MemorySegment recvBuffer = arena.allocate(RECV_BUFFER_SIZE); return recvUntilDeadline(linuxUdpSocketAPI, fd, recvBuffer); } finally { @@ -106,26 +105,22 @@ public class ScanUdpPortTask implements Callable<PortResult> { break; } - long bytesRead; try { - bytesRead = socketAPI.recv(fd, buffer); - } catch (RawLinuxSocketException e) { - final int errno = e.errno; - if (errno == LinuxUdpSocketAPI.ECONNREFUSED) { - return PortState.CLOSED; + long bytesRead = socketAPI.recv(fd, buffer); + if (bytesRead >= 0) { + return PortState.OPEN; } - if (errno == LinuxUdpSocketAPI.EAGAIN || errno == LinuxUdpSocketAPI.EWOULDBLOCK) { - // no datagram has arrived yet; keep polling - bytesRead = -1; - } else { - throw new IOException("recv() failed: errno=" + errno); + } catch (RawLinuxSocketException e) { + switch(e.errno) { + case LinuxUdpSocketAPI.ECONNREFUSED: + return PortState.CLOSED; + case LinuxUdpSocketAPI.EAGAIN: + break; + default: + throw new IOException("recv() failed: errno=" + e.errno); } } - if (bytesRead >= 0) { - return PortState.OPEN; - } - LockSupport.parkNanos(Math.min(waitInNanos, remainingNanos)); } 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 bfe70d4..9996b85 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 @@ -14,7 +14,6 @@ public class LinuxUdpSocketAPI { public static final int AF_INET = 2; public static final int AF_INET6 = 10; public static final int EAGAIN = 11; - public static final int EWOULDBLOCK = 11; public static final int ECONNREFUSED = 111; public static final int SOCK_DGRAM = 2; public static final int F_GETFL = 3; |
