C++ 为什么';这个Avahi客户端代码是否可以将CNAME别名添加到我的Linux机器上?
我正试图编写一个小程序,将mDNS CNAME别名添加到我的Linux设备中,这样就可以通过多个“something.local.”域名访问它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记录
此程序的预期功能与此相同,但为了避免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
后,我试图从网络上的另一个系统pingwww.bunsen.local
,但未能成功。我能够ping bunsen.local
msli-10135114local] _moduleName=[Wild-Tracks-1]
add_record: Not supported
Failed to add module record: Not supported