private void bindNewInterfaces()

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"));
    }