Задний план
Я работаю над кросс-платформенной библиотекой Zeroconf/Bonjour/DNS-SD для Haskell и решил, что лучше всего будет выбрать dns_sd.h
API. В Linux реализация этого интерфейса обеспечивается Avahi, которая утверждает, что поддерживает подмножество API Bonjour. .
Проблема
В качестве проверки работоспособности моей библиотеки я написал небольшую тестовую программу на C, которая просто использует костяк API. Он просматривает любой сервис в сети типа _http._tcp
, печатает сообщение, как только его видит, а затем умирает:
#include <dns_sd.h>
#include <stdio.h>
#include <stdlib.h>
void cb(DNSServiceRef sdRef,
DNSServiceFlags flags,
uint32_t interfaceIndex,
DNSServiceErrorType errorCode,
const char *serviceName,
const char *regtype,
const char *replyDomain,
void *context) {
printf("called!\n");
}
int main() {
DNSServiceRef sd = malloc(sizeof(DNSServiceRef));
const char *regtype = "_http._tcp";
DNSServiceErrorType err1 = DNSServiceBrowse(&sd, 0, 0, regtype, NULL, &cb, NULL);
printf("err1=%d\n", err1);
DNSServiceErrorType err2 = DNSServiceProcessResult(sd);
printf("err2=%d\n", err2);
return 0;
}
На моем Mac эта тестовая программа отлично работает как на C, так и на эквивалентном Haskell (она находит мой принтер; интересно!):
$ gcc test.c -o test
$ ./test
err1=0
called!
err2=0
Но на моей машине с Linux программа ругает меня перед выходом без вызова обратного вызова:
$ gcc test.c -o test -ldns_sd
$ ./test
*** WARNING *** The program 'test' uses the Apple Bonjour compatibility layer of Avahi.
*** WARNING *** Please fix your application to use the native API of Avahi!
*** WARNING *** For more information see <http://0pointer.de/avahi-compat?s=libdns_sd&e=test>
err1=0
err2=0
Вопросы
- Является ли уровень совместимости Avahi
dns_sd
подходящей целью для межплатформенной привязки? Или это предупреждающее сообщение достаточно серьезно относится к использованию собственного API Avahi, и мне следует подумать о перенацеливании? - Каково современное состояние кроссплатформенного Zeroconf на C?
malloc
на случай, если по какой-то странной причине это имело значение. Обе версии работали одинаково. - person acfoltzer   schedule 18.09.2011