在Lua中编写PowerDNS后端

时间:2011-06-27 22:03:41

标签: lua dns

我只是无法让这个工作。该脚本正确地回答,并且PowerDNS认为它正常工作,但是这个过程永远不会超出对其准备就绪的认可。

PowerDNS服务器卡在read()中,端口53上的所有网络连接完全被忽略。服务器启动pdns_server进程以及脚本本身,没有任何反应。记录9级完全没有价值:没有任何反应。除了可以看到脚本中的stderr输出之外,同样适用于“pdns监视器”。

我已经放了脚本here。这是所以令人沮丧...我错过了什么?是io.lines()电话吗?是因为输入是缓冲的吗?

更新:我正在使用documentation创建此内容。我还查看了其他语言(我知道一些) - 例如v6rev(虽然我不懂Python)和Java中后端的this example

更新2 我更好地提到这也与gmysql后端相结合; PowerDNS确实允许多个后端,但我不知道它的具体细节。我确实在配置文件中切换了后端的顺序,之后没有看到任何变化。此外,MySQL查询工作。没有pipe后端,MySQL后端处理的事情就好了。

1 个答案:

答案 0 :(得分:0)

没有人有任何提示,所以......这就是我发现的。它确实与缓冲相关 - 或者至少是它的外观。代码原来有这样的行:

print("OK\tPowerDNS backend ok")

这些问题是问题所在;用这个顺序替换它们:

print("OK\tPowerDNS backend ok")
io.flush()

然而 - 用以下序列替换它们工作:

io.write("OK\tPowerDNS backend ok")
io.flush()

据推测,这是因为print()io.write()之间存在一些差异。寻找有关Lua无缓冲I / O的详细信息。可能我应该使用io.stdout.write()而不是io.write()

偶然地,我遇到了this posting到Lua-Users邮件列表,其中提到了setvbuf功能。但是,setvbuf函数在Lua 5.1中似乎是新的,因此在Lua 5.0中不可用。