gethostbyname()をうまく使っているcygwin(GCCを使用)の下で書いているコードがあります。しかし、DNSサーバーのIPアドレスを取得するためにリゾルバを直接使用しようとすると失敗します(nsaddr_list []のすべてのエントリはnullで、nscountは-1です)。 gethostbyname()が動作している場合、明らかにDNSサーバーに接続できます。
このコードは... UNIX/Linux上でgcc/cygwinはどのように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);
}
}
作品が、NSCOUNT = -1を返しますcygwinの上で。 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アドレスをフォーマットする} ' – caf
良い点、もっとクリーナー。ありがとう。 –