Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么';这个Avahi客户端代码是否可以将CNAME别名添加到我的Linux机器上?_C++_Linux_Client_Cname - Fatal编程技术网

C++ 为什么';这个Avahi客户端代码是否可以将CNAME别名添加到我的Linux机器上?

C++ 为什么';这个Avahi客户端代码是否可以将CNAME别名添加到我的Linux机器上?,c++,linux,client,cname,C++,Linux,Client,Cname,我正试图编写一个小程序,将mDNS CNAME别名添加到我的Linux设备中,这样就可以通过多个“something.local.”域名访问它 此程序的预期功能与此相同,但为了避免Python依赖,我尝试用C++来实现它。 我的代码(目前)基于Avahi源代码发行版中包含的client publish service.c示例。当我不加修改地运行这个示例时,它会按预期工作:特别是,我在Mac上的Bonjour浏览器中看到“MegaPrinter”,等等 我的下一步是修改示例代码以添加CNAME记录

我正试图编写一个小程序,将mDNS CNAME别名添加到我的Linux设备中,这样就可以通过多个“something.local.”域名访问它

此程序的预期功能与此相同,但为了避免Python依赖,我尝试用C++来实现它。 我的代码(目前)基于Avahi源代码发行版中包含的client publish service.c示例。当我不加修改地运行这个示例时,它会按预期工作:特别是,我在Mac上的Bonjour浏览器中看到“MegaPrinter”,等等

我的下一步是修改示例代码以添加CNAME记录,而不是添加服务。因此,我#ifdef发出avahi#u entry_group#u add#u service()调用,并将其放入:

 const int TTL = 60;

 char rdata[] = "\0msli-10135114\0local";   // "msli10135114.local." is the device's normal FQDN, which I want to make aliases to
 rdata[0]   = 13;
 rdata[14]  = 5;

 printf("rdata=[%s] _moduleName=[%s]\n", rdata, _moduleName);
 printf("add_record: %s\n", avahi_strerror(avahi_entry_group_add_record (group, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, (AvahiPublishFlags)0, "TestX", 0x01, 0x10, 120, "\5booya", 6)));

 if ((ret = avahi_entry_group_add_record(
    group,                 //AvahiEntryGroup *group,
    AVAHI_IF_UNSPEC,       //AvahiIfIndex interface,
    AVAHI_PROTO_UNSPEC,    //AvahiProtocol protocol,
    (AvahiPublishFlags)0,  //AvahiPublishFlags flags,
    _moduleName,           //const char *name,
    AVAHI_DNS_CLASS_IN,    //uint16_t clazz,
    AVAHI_DNS_TYPE_CNAME,  //uint16_t type,
    TTL,                   //uint32_t ttl,
    rdata,                 //const void *rdata,
    sizeof(rdata)          //size_t size
    )) < 0)
 {
    if (ret == AVAHI_ERR_COLLISION) goto collision;
    fprintf(stderr, "Failed to add module record: %s\n", avahi_strerror(ret));
    goto fail;
 }
奇怪的是,不仅我自己对avahi_entry_group_add_record()的调用失败,代码avahi_ERR_不受支持,而且我的一次性测试调用(在printf(“add_record”)中)也失败,错误代码相同。但该调用是从avahi附带的avahi client/client test.c文件中逐字复制出来的,因此它似乎应该是一个有效的调用

有谁能告诉我为什么这些电话可能会失败,或者我在这里做错了什么


如果有帮助的话,测试的完整源代码是。

我终于找到了这个。。。问题是avahi_entry_group_add_记录的(AvahipPublishFlags)参数需要包含avahi_PUBLISH_USE_多播位,而不仅仅是零。奇怪的是,我作为示例使用的Python脚本没有包含这一点


在任何情况下,如果有人感兴趣,都可以使用源代码的工作版本。

编译并执行
publish\u cnames www.bunsen.local fairplay.bunsen.local
后,我试图从网络上的另一个系统ping
www.bunsen.local
,但未能成功。我能够
ping bunsen.local
msli-10135114local] _moduleName=[Wild-Tracks-1]
add_record: Not supported 
Failed to add module record: Not supported