getaddrinfo()는 ipv4와 ipv6을 모두 반환하는 반면 로컬 시스템은 ipv4만 반환합니다.

getaddrinfo()는 ipv4와 ipv6을 모두 반환하는 반면 로컬 시스템은 ipv4만 반환합니다.

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_INETIPv4 의 경우 , AF_INET6IPv6의 경우.

관련 정보