dns_sd DNSServiceBrowse()失败,错误为-65563:后台守护程序未运行

时间:2018-09-04 15:12:31

标签: c mingw bonjour dns-sd

我试图在跨平台的C应用程序(Linux / Windows)中使用dns_sd-Librarys和Apple的Bonjour守护程序来查找网络上该应用程序的其他实例。尽管它可以在具有Avahi和avahi-compat-libdns_sd的Linux上完美运行,但我无法使其在具有Bonjour的Windows上运行。不幸的是,Windows应用程序仅限于32位mingw32工具链(gcc 4.9.2)。

它编译并链接没有错误,但是对dnssd-API的每次调用均失败,错误代码为-65563 背景守护程序未运行

Bonjour守护程序正在运行(我仔细检查了Windows服务和mDNSResponder.exe进程),甚至命令行上的dns-sd.exe都可以正常运行。我正在使用Windows 7 x64和Bonjour / Bonjour SDK 3.0.0.10。

这是一个最小的无法正常运行的示例程序:

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>

#include "dns_sd.h"
#include <windows.h>

static DNSSD_API void DNSServiceBrowseCallback(
    DNSServiceRef                       sdRef,
    DNSServiceFlags                     flags,
    uint32_t                            interfaceIndex,
    DNSServiceErrorType                 errorCode,
    const char                          *serviceName,
    const char                          *regtype,
    const char                          *replyDomain,
    void                                *context)
{
    printf("%s service %s.%s%s    (error code %i)\n",
            (flags & kDNSServiceFlagsAdd) ? "new" : "vanished",
            serviceName,
            regtype,
            replyDomain,
            errorCode);
}


int main( int argc, char** argv ) {
    DNSServiceRef sdRef = NULL;
    DNSServiceErrorType res = DNSServiceBrowse(&sdRef, 0, 0, "_ipp._tcp", NULL,
            &DNSServiceBrowseCallback, sdRef);
    if (res != kDNSServiceErr_NoError) {
        printf("Could not start network discovery: Errorcode %i\n", res);
        return 1;
    }

    // Enter loop to receive results
    // [...]

    return 0;
}

使用

进行编译
gcc.exe -g -Wall -std=c99 -DWINVER=0x0501 dnssd-test.c -ldnssd -o dnssd-test.exe

触发链接器警告警告:def文件末尾的.drectve损坏,但会创建有效的可执行文件。执行它会导致上述错误代码(无法启动网络发现:错误代码-65563 ),并且不会初始化sdRef,因此,尽管服务器在网络上被宣布,但回调函数永远不会被调用。

我已经尝试过旧版本的Bonjour和Bonjour SDK,但没有成功。

0 个答案:

没有答案