使用resolv.h

时间:2012-07-07 03:13:59

标签: c dns resolver

我试图通过从resolv.h的_res结构中读取来查找我的DNS服务器地址。根据man 3解析器的设置代码应该是。

#include <netinet/in.h>
#include <arpa/nameser.h>
#include <resolv.h>

extern struct state _res;

然后我就读出了我需要的东西。我的问题是尝试编译这个我得到

resolver.c:5:21: error: conflicting types for '__res_state'
extern struct state _res;
                    ^
/usr/include/resolv.h:251:16: note: expanded from macro '_res'
#define _res (*__res_state())
               ^
/usr/include/resolv.h:249:28: note: previous declaration is here
extern struct __res_state *__res_state(void) __attribute__ ((__const__));
                           ^
1 error generated.

by clang。

我做错了什么?

2 个答案:

答案 0 :(得分:3)

你不应该自己声明_res - resolv.h包括正确的声明(尽管手册页暗示了这一点)。

答案 1 :(得分:2)

#include <netinet/in.h>
#include <arpa/nameser.h>
#include <resolv.h>


int main() {

    // call this first
    res_init();

    // do something with this list it contains list of dns servers
    _res.nsaddr_list[0];

}