我想查詢特定的服務器,並以與我們通過getaddrinfo
獲得結果相同的方式獲得結果。我想得到一個addrinfo
結構,所以我可以有IP,端口和指向下一個結果的指針。查詢服務器並以addrinfo的形式得到結果struct
我正在使用下面的代碼,查詢我想要的服務器,並獲得結果。但是每個結果都在另一個結構中,並且它們不會彼此指向(不在列表中)。
這是代碼:
static int my_getaddrinfo(const char *dns_server_s, const char *node, const char *service, const struct addrinfo *hints, struct addrinfo **res) {
int retValue = 1;
struct __res_state result;
char ip[16];
memset(ip, '\0', sizeof(ip));
res_ninit(&result);
struct in_addr addr;
inet_aton(dns_server_s, &addr);
result.nsaddr_list[0].sin_addr = addr;
result.nsaddr_list[0].sin_family = AF_INET;
result.nsaddr_list[0].sin_port = htons(NS_DEFAULTPORT);
result.nscount = 1;
u_char answer[NS_PACKETSZ];
int len = res_nquery(&result, node, ns_c_in, ns_t_a, answer, sizeof(answer));
ns_msg handle;
ns_initparse(answer, len, &handle);
if(ns_msg_count(handle, ns_s_an) > 0) {
ns_rr rr;
if(ns_parserr(&handle, ns_s_an, 0, &rr) == 0) {
strcpy(ip, inet_ntoa(*(struct in_addr *)ns_rr_rdata(rr)));
getaddrinfo(ip, service, hints, res);
retValue = 0;
}
}
return retValue;
}
是否有可能得到的結果我想要的方式?類似於 addrinfo結構?
編輯: 我可以看到,我得到三個答案ns_msg_count(handle, ns_s_an) = 3
和訪問每個答案我應該叫ns_parserr(&handle, ns_s_an, answer_index, &rr)
但正如我所說,我希望得到這些答案的列表,就像我通過調用讓他們getaddrinfo
。
你有沒有真的試圖什麼嗎?根據你的描述,你看起來好像你知道你在做什麼,那麼你的問題究竟在哪裏?查找哪些參數是結果集中的索引(我假設它是'0'),然後遍歷結果,並隨時創建一個「addrinfo」列表。 – Phillip
我知道我可以獲取in_addr,但是如何從結果中獲得addrinfos? – Roee84
或者你的意思是隻爲每個ip調用getaddrinfo .. – Roee84