in functions/CDDMdnsServiceResolverJava/src/main/java/com/amazonaws/greengrass/cddmdnsserviceresolver/handlers/StartupHandler.java [58:92]
private void bindNewInterfaces() {
List<InetAddress> allAddresses = getAllAddresses();
List<InetAddress> listeningAddresses = getListeningAddresses();
List<InetAddress> addressesToTry = allAddresses.removeAll(listeningAddresses);
if (addressesToTry.isEmpty()) {
log.info("No new interfaces");
return;
}
log.info("New interfaces to listen on:");
addressesToTry.forEach(address -> log.info(" - " + address));
log.info("Creating JmDNS instances...");
List<JmDNS> newListeners = addressesToTry
// Try to create the JmDNS instances
.map(inetAddress -> Try.of(() -> JmDNS.create(inetAddress)))
// Get all of the successful attempts
.filter(Try::isSuccess)
.map(Try::get)
// Store them as a list
.collect(List.collector());
// Add the service listener to all of the new jmDNS instances
newListeners.forEach(jmDNS -> jmDNS.addServiceListener(SERVICE_TYPE, mdnsServiceListener));
// Add the new listeners to the existing list
jmDNSList = jmDNSList.appendAll(newListeners);
// Determine which addresses failed
List<InetAddress> failedInetAddresses = List.ofAll(allAddresses).removeAll(listeningAddresses);
// Log all of the failed addresses
failedInetAddresses.forEach(inetAddress -> log.error("Address [" + inetAddress + "] was unable to start listening for mDNS packets"));
}