| 
Q: I want to use Bonjour to advertise my services but I only want to do so on a specific set of networking interfaces. Is this possible?A: Yes. However, you will NOT be able to use the NSNetServices and CFNetServices APIs to do this. You will need to use the DNSServiceDiscovery socket-based API. You can register your service by issuing a call to  Listing 1: Example function that registers a service on a single interface. 
static int doBonjourRegisterOnSingleInterface(
    char * interface_name,          // e.g., "en0", "en1", etc.
    DNSServiceRef * ssr,
    DNSServiceRegisterReply callBack
)
{
    int err = 0;
    DNSServiceFlags flags   = kDNSServiceFlagsDefault;
    uint32_t int_index      = 0;
    const char *name        = "Clarus";
    const char *regtype     = "_http._tcp";
    const char *domain      = NULL;     // default domain
    const char *host        = NULL;     // default host
    uint16_t port           = 9999;
    uint16_t txtLen         = 5;
    const char txtRecord[]  = "\x04Moof";
    // Resolve the index of the specified interface.
    int_index = if_nametoindex(interface_name);
    if(int_index != 0) {
          err = DNSServiceRegister(
                            ssr,
                            flags,
                            int_index,
                            name,       /* may be NULL */
                            regType,
                            domain,     /* may be NULL */
                            host,       /* may be NULL */
                            htons(port),
                            txtLen,
                            txtRecord,
                            callback,   /* may be NULL */
                            NULL        /* may be NULL */
          );
     } else {
          // Desired interface name could not be resolved.
          err = -1;
     }
    return err;
}
Note: Be mindful of the formats and types for the data parameters passed into  Document Revision History
 Posted: 2007-02-12  | 
  |