使用 getnameinfo() 进行反向名称查找不适用于自定义 sockaddr_in6

问题描述 投票:0回答:1

我编写了以下代码并期望它返回 google.com 的地址。但是,它最后返回一个空字符串。我需要修复什么才能使其正常工作? getnameinfo() 给出的错误代码为 -6

#include <stdio.h>
#include <netdb.h>
#include <arpa/inet.h>

#include <iostream>

int main(int argc, char* argv[]) {  
  const char* presentation_addr = "2001:4860:4860::8888";
  
  // create a socket structure 
  struct in6_addr in6;
  int retval = inet_pton(AF_INET6, presentation_addr, &in6);
  sockaddr_in6 in6_sa;
  in6_sa.sin6_addr = in6;
  in6_sa.sin6_family = AF_INET6;

  sockaddr *sa = (struct sockaddr* )&in6_sa;
  char buf[NI_MAXHOST];
  
  retval = getnameinfo(sa, sizeof(sa), buf, sizeof(buf), NULL, 0, NI_NAMEREQD);
  if (retval) {
    std::cout << "getnameinfo() errored with code " << retval << std::endl;
  }
  std::cout << buf << std::endl;
  return 0;
}

c++ c linux sockets unix
1个回答
0
投票

我用 getnameinfo 重写了这部分,它成功了

retval = getnameinfo((struct sockaddr*)&in6_sa, sizeof(in6_sa), buf, sizeof(buf), NULL, 0, NI_NAMEREQD);

© www.soinside.com 2019 - 2024. All rights reserved.