我在使用systemd启动的进程下使用getaddrinfo()API查询DNS时遇到问题。尽管在/etc/resolv.conf中有nameserver条目,但查询无法解析。在几次系统调用跟踪之后,发现该问题是由系统分辨率引起的。对于systemd所引发的进程,似乎是在独立模式下(即由shell生成)通过systemd路由的getaddrinfo()DNS查询,查询正常进行。我更改了/etc/systemd/resolved.conf以添加我的DNS地址并重新启动systemd-resolved。现在DNS查询正常工作。
有没有为getaddrinfo()绕过systemd [例如:将额外的标志传递给提示],并以通常的方式完成工作?
答案 0 :(得分:0)
在我看来,真正的getaddrinfo()
调用应该始终使用glibc。
我最好的猜测是假设与系统进程启动的相关性完全是错误的。在systemd系统上,所有普通进程都由systemd直接或间接启动。
glibc执行的网络名称解析不仅由/etc/resolv.conf
驱动,还由/etc/nsswitch.conf
驱动。您可能会看到该文件中提到的已解决。