![getaddrinfo()는 ipv4와 ipv6을 모두 반환하는 반면 로컬 시스템은 ipv4만 반환합니다.](https://linux55.com/image/193047/getaddrinfo()%EB%8A%94%20ipv4%EC%99%80%20ipv6%EC%9D%84%20%EB%AA%A8%EB%91%90%20%EB%B0%98%ED%99%98%ED%95%98%EB%8A%94%20%EB%B0%98%EB%A9%B4%20%EB%A1%9C%EC%BB%AC%20%EC%8B%9C%EC%8A%A4%ED%85%9C%EC%9D%80%20ipv4%EB%A7%8C%20%EB%B0%98%ED%99%98%ED%95%A9%EB%8B%88%EB%8B%A4..png)
ipv4 및 ipv6을 지원하는 도메인에서 목록 IP 주소를 가져오는 데 사용하고 있지만 getaddrinfo(3)
로컬 시스템은 ipv4만 지원하거나 ipv4 및 ipv6을 모두 지원합니다. 시스템이 ipv4와 ipv6을 모두 지원하면 ipv4와 ipv6을 getaddrinfo(3)
모두 쿼리합니다. 시스템은 ipv4 및 ipv6만 지원합니다. ipv4를 지원하고 getaddrinfo(3)
ipv4만 쿼리합니다. 설정 ai_flags
을 시도했지만 AI_ADDRCONFIG
여전히 ipv4 및 ipv6을 쿼리하고 시스템은 ipv4만 지원합니다. 나는 무엇을 해야 합니까?
이것은 내 코드입니다.
struct addrinfo hint, *res = NULL, *p = NULL;
int err;
ACE_OS::memset(&hint, 0, sizeof hint);
hint.ai_family = AF_UNSPEC;
hint.ai_socktype = SOCK_STREAM;
hint.ai_flags = AI_ADDRCONFIG;
err = ACE_OS::getaddrinfo(hostname.c_str() ,"http", &hint, &res);
답변1
IPv4만 필요하다는 것을 알고 있는 경우 이를 ai_family
로 설정하십시오 AF_INET
.
AF_INET
IPv4 의 경우 , AF_INET6
IPv6의 경우.