gpt4 book ai didi

c++ - 为什么此 Avahi 客户端代码无法将 CNAME 别名添加到我的 Linux 机器?

转载 作者:太空狗 更新时间:2023-10-29 11:34:42 27 4
gpt4 key购买 nike

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

此程序的预期功能与 avahi-aliases Python script 相同,但为了避免依赖 Python,我尝试用 C++ 来实现它。

我的代码(目前)基于 Avahi 源代码分发中包含的 client-publish-service.c 示例。当我不加改动地运行该示例时,它按预期工作:特别是,我看到“MegaPrinter”出现在我的 Mac 等设备上的 Bonjour 浏览器中。

我的下一步是修改示例代码以添加 CNAME 记录而不是添加服务。所以我 #ifdef 取消了 avahi_entry_group_add_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;
}

.... 但它不起作用;特别是,运行例程只会给我这个输出:

msli-10135114local] _moduleName=[Wild-Tracks-1]
add_record: Not supported
Failed to add module record: Not supported

奇怪的是,不仅我自己对 avahi_entry_group_add_record() 的调用失败并返回代码 AVAHI_ERR_NOT_SUPPORTED,而且我的一次性测试调用(在 printf("add_record") 内)也失败并返回相同的错误代码。但是这个调用是从 Avahi 附带的 avahi-client/client-test.c 文件中逐字复制的,所以它看起来应该是一个有效的调用。

谁能提出为什么这些调用可能会失败,或者我在这里做错了什么?

如果有帮助,完整的测试源代码是here .

最佳答案

我终于弄明白了……问题是 avahi_entry_group_add_record 的 (AvahiPublishFlags) 参数需要包含 AVAHI_PUBLISH_USE_MULTICAST 位,而不仅仅是零。奇怪的是,我用作示例的 Python 脚本不包含该位。

无论如何,源代码的工作版本是here ,以防万一有人感兴趣。

关于c++ - 为什么此 Avahi 客户端代码无法将 CNAME 别名添加到我的 Linux 机器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3963902/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com