Распространение службы Bonjour на определенный набор сетевых интерфейсов.
Q: Я хочу использовать Добрый день для распространения моих служб, но я только хочу сделать так на определенном наборе сетевых интерфейсов. Действительно ли это возможно?
A: Я хочу использовать Добрый день для распространения моих служб, но я только хочу сделать так на определенном наборе сетевых интерфейсов. Действительно ли это возможно?
Да. Однако Вы НЕ будете в состоянии использовать NSNetServices и CFNetServices APIs, чтобы сделать это. Необходимо будет использовать DNSServiceDiscovery основанный на сокете API.
Можно зарегистрировать службу путем издавания приказа к DNSServiceRegister(), обращение пристального внимания на третий параметр, указывающий интерфейсный индекс. Определение, которое интерфейсный индекс отображает на определенное имя интерфейса, может быть сделано путем вызова if_nametoindex(). Посмотрите ниже для примера:
Функция перечисления 1 В качестве примера, регистрирующая службу на единственный интерфейс.
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;
} |
История версии документа
| Дата | Примечания |
|---|---|
| 12.02.2007 | Новый документ, объясняющий, как зарегистрировать службу Bonjour только на определенный набор сетевых интерфейсов. |