< prev index next >
src/java.base/macosx/classes/java/net/DefaultInterface.java
Print this page
rev 16951 : [mq]: defaultInterface
*** 48,61 ****
static NetworkInterface getDefault() {
return defaultInterface;
}
/**
! * Choose a default interface. This method returns an interface that is
! * both "up" and supports multicast. This method choses an interface in
* order of preference:
* 1. neither loopback nor point to point
* 2. point to point
* 3. loopback
*
* @return the chosen interface or {@code null} if there isn't a suitable
* default
--- 48,62 ----
static NetworkInterface getDefault() {
return defaultInterface;
}
/**
! * Choose a default interface. This method returns the first interface that
! * is both "up" and supports multicast. This method chooses an interface in
* order of preference:
* 1. neither loopback nor point to point
+ * ( prefer interfaces with dual IP support )
* 2. point to point
* 3. loopback
*
* @return the chosen interface or {@code null} if there isn't a suitable
* default
*** 64,97 ****
Enumeration<NetworkInterface> nifs;
try {
nifs = NetworkInterface.getNetworkInterfaces();
} catch (IOException ignore) {
! // unable to enumate network interfaces
return null;
}
NetworkInterface ppp = null;
NetworkInterface loopback = null;
while (nifs.hasMoreElements()) {
NetworkInterface ni = nifs.nextElement();
try {
! if (ni.isUp() && ni.supportsMulticast()) {
boolean isLoopback = ni.isLoopback();
boolean isPPP = ni.isPointToPoint();
if (!isLoopback && !isPPP) {
// found an interface that is not the loopback or a
// point-to-point interface
return ni;
}
if (ppp == null && isPPP)
ppp = ni;
if (loopback == null && isLoopback)
loopback = ni;
! }
} catch (IOException skip) { }
}
return (ppp != null) ? ppp : loopback;
}
}
--- 65,122 ----
Enumeration<NetworkInterface> nifs;
try {
nifs = NetworkInterface.getNetworkInterfaces();
} catch (IOException ignore) {
! // unable to enumerate network interfaces
return null;
}
+ NetworkInterface preferred = null;
NetworkInterface ppp = null;
NetworkInterface loopback = null;
while (nifs.hasMoreElements()) {
NetworkInterface ni = nifs.nextElement();
try {
! if (!ni.isUp() || !ni.supportsMulticast())
! continue;
!
! boolean ip4 = false, ip6 = false;
! Enumeration<InetAddress> addrs = ni.getInetAddresses();
! while (addrs.hasMoreElements()) {
! InetAddress addr = addrs.nextElement();
! if (!addr.isAnyLocalAddress()) {
! if (addr instanceof Inet4Address) {
! ip4 = true;
! } else if (addr instanceof Inet6Address) {
! ip6 = true;
! }
! }
! }
!
boolean isLoopback = ni.isLoopback();
boolean isPPP = ni.isPointToPoint();
if (!isLoopback && !isPPP) {
// found an interface that is not the loopback or a
// point-to-point interface
+ if (preferred == null) {
+ preferred = ni;
+ } else if (ip4 == true && ip6 == true){
return ni;
}
+ }
if (ppp == null && isPPP)
ppp = ni;
if (loopback == null && isLoopback)
loopback = ni;
!
} catch (IOException skip) { }
}
+ if (preferred != null) {
+ return preferred;
+ } else {
return (ppp != null) ? ppp : loopback;
}
+ }
}
< prev index next >