2012-02-29 149 views
0

我试图通过使用res_query来实现简单的DNS SRV查询。我对res_query部分代码如下:为什么SRV res_query总是返回-1?

char* target; 
short* port; 

union { 
    HEADER hdr; 
    u_char buf[1024]; 
} response; 

ns_msg handle; 
ns_rr rr; 
u_char buf[256], *p; 
int t, len, priority, weight; 

if ((len = res_query(query, C_IN, ns_t_srv, (u_char *)&response, sizeof(response))) <0) { 
    cout << "res_query returned -1, no answer" << endl; 
    return 0; 
} 

这仅仅是代码的一部分,但我想有所有需要的东西做res_query。每次我执行SRV查询时,res_query返回'-1',这意味着它失败。问题在我的res_query中,还是我在做其他问题?

我试着去做www.example.com的SRV查询。

回答

0

res_query将返回-1,如果没有找到匹配的记录。

除此之外,您的代码对我来说工作正常,虽然OSX需要​​而不是C_IN

尝试使用_nicname._tcp.us.而不是www.example.com进行测试。

+0

我试过对现在的几个域做SRV查询,当一些站点返回SRV记录时,它似乎只是随机的。建议的'_nicname._tcp.us'首先没有返回任何内容,但过了一段时间,它给了我一个答案。当我尝试使用'dig'和'nslookup'命令来执行SRV查询时发生了同样的情况。我认为每个域在返回SRV查询时至少会返回一些内容。我还发现了其他一些建议的网站,比如'_sip._udp_columbia.edu',它的行为方式完全一样:有时会返回记录,有时却不会。 – zaplec 2012-03-02 07:36:19