【发布时间】:2012-05-18 10:12:11
【问题描述】:
我在 cygwin(使用 GCC)下编写了一些成功使用 gethostbyname() 的代码;但是,当我尝试直接使用解析器来检索 DNS 服务器的 IP 地址时,它会失败(nsaddr_list[] 中的所有条目都为空且 nscount 为 -1)。
如果 gethostbyname() 工作正常,那么显然它能够连接到 DNS 服务器。
这段代码...
if (res_init() == -1) {
fprintf(stderr,"res_init() failed\n");
exit(1);
}
if (_res.nscount <= 0) {
fprintf(stderr,"nscount = %d\n",_res.nscount);
}
else {
for(i=0;i<_res.nscount;i++) {
fprintf(stderr, "dnssrvr: %d.%d.%d.%d\n",
(_res.nsaddr_list[i].sin_addr.s_addr & 0xff) >> 0,
(_res.nsaddr_list[i].sin_addr.s_addr & 0xff00) >> 8,
(_res.nsaddr_list[i].sin_addr.s_addr & 0xff0000) >> 16,
(_res.nsaddr_list[i].sin_addr.s_addr & 0xff000000) >> 24);
}
}
适用于 unix/linux,但在 cygwin 上返回 nscount=-1。 使用cygwin/gcc时获取DNS服务器有什么技巧吗?
【问题讨论】:
-
顺便说一句,您可以使用
{ char buf[INET_ADDRSTRLEN]; fprintf(stderr, "dnssrvr: %s\n", inet_ntop(AF_INET, &_res.nsaddr_list[i].sin_addr, buf, sizeof buf)); }来格式化IP地址。 -
好点,干净多了。谢谢。
标签: c networking cygwin dns libresolv