Skip to content

Commit 0990f98

Browse files
author
Federico Fissore
committed
InetAddress.isReachable is reported reliable on mac and recent java versions
Refactored NetUtils.isReachable to two functions: isReachableByEcho and isPortOpen If the first one will fail, the second one will be used
1 parent 3fec636 commit 0990f98

File tree

2 files changed

+28
-4
lines changed

2 files changed

+28
-4
lines changed

arduino-core/src/cc/arduino/packages/discoverers/NetworkDiscovery.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -75,10 +75,7 @@ public List<BoardPort> discovery() {
7575
ports.add(0, 22);
7676
}
7777

78-
boolean reachable = false;
79-
for (Integer port : ports) {
80-
reachable = reachable || NetUtils.isReachable(inetAddress, port);
81-
}
78+
boolean reachable = NetUtils.isReachable(inetAddress, ports);
8279
if (!reachable) {
8380
boardPortIterator.remove();
8481
}

arduino-core/src/processing/app/helpers/NetUtils.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,37 @@
44
import java.net.InetAddress;
55
import java.net.InetSocketAddress;
66
import java.net.Socket;
7+
import java.util.Arrays;
8+
import java.util.List;
79

810
public abstract class NetUtils {
911

12+
private static boolean isReachableByEcho(InetAddress address) {
13+
try {
14+
return address.isReachable(100);
15+
} catch (IOException e) {
16+
return false;
17+
}
18+
}
19+
1020
public static boolean isReachable(InetAddress address, int port) {
21+
return isReachable(address, Arrays.asList(port));
22+
}
23+
24+
public static boolean isReachable(InetAddress address, List<Integer> ports) {
25+
if (isReachableByEcho(address)) {
26+
return true;
27+
}
28+
29+
boolean reachable = false;
30+
for (Integer port : ports) {
31+
reachable = reachable || isPortOpen(address, port);
32+
}
33+
34+
return reachable;
35+
}
36+
37+
private static boolean isPortOpen(InetAddress address, int port) {
1138
Socket socket = null;
1239
try {
1340
socket = new Socket();

0 commit comments

Comments
 (0)