new Prober().start();
openMulticastSocket(localHost); start(services);
    private void init(InetAddress intf, String name) throws IOException {        // A host name with "." is illegal. so strip off everything and append .local.        int idx = name.indexOf(".");        if(idx > 0)            name = name .substring(0, idx);        name += ".local.";                // Bind to multicast socket        group = InetAddress.getByName(DNSConstants.MDNS_GROUP);        socket = new MulticastSocket(DNSConstants.MDNS_PORT);        if (intf != null) {            socket.setInterface(intf);        }        socket.setTimeToLive(255);        socket.joinGroup(group);        loopback = isLoopback(intf);        linklocal = isLinkLocal(intf);                        cache = new DNSCache(100);                listeners = new Vector();        serviceListeners = new HashMap();        typeListeners = new Vector();                services = new Hashtable(20);        serviceTypes = new Hashtable(20);                // host to IP address binding        byte data[] = intf.getAddress();        int ip = ((data[0] & 0xFF) << 24) |        ((data[1] & 0xFF) << 16) |        ((data[2] & 0xFF) <<  8) |        (data[3] & 0xFF);                // REMIND: If I could pass in a name for the Timer thread,        //         I would pass 'JmDNS.Timer'.        timer = new Timer();        //timer.schedule(new RecordReaper(), DNSConstants.RECORD_REAPER_INTERVAL, DNSConstants.RECORD_REAPER_INTERVAL);        new RecordReaper().start();        shutdown = new Thread(new Shutdown(), "JmDNS.Shutdown");        Runtime.getRuntime().addShutdownHook(shutdown);                host = new DNSRecord.Address(name, DNSConstants.TYPE_A, DNSConstants.CLASS_IN, DNSConstants.DNS_TTL, ip);        incomingListener = new SocketListener();        new Thread(incomingListener, "JmDNS.SocketListener").start();                new Prober().start();    }