2012-12-11 3 views
0

PHP curl은 getaddrinfo()를 사용하여 호스트 이름을 IP 주소로 확인합니다. 옵션을 설정하면 IPV4 주소를 쉽게 찾을 수 있지만 꽤 많은 일이 걸릴 것이며 IPv6를 네트워크에 올리면 정상적으로 실행 취소하기가 어려울 것입니다.기본적으로 IPV4 주소 만 검색하도록 getaddrinfo()를 설정할 수 있습니까?

전체 우분투 서버에 대해 getaddrinfo()를 IPv4 조회로 기본 설정하는 방법이 있습니까?

감사 웨인

+0

C 또는 PHP의 솔루션에 관심이 있습니까? – askmish

+0

아니요. 내가 sys 또는 dev에 IPv4로 조회를 기본값으로 같은 어딘가에 기본 설정을 설정하고 싶습니다. – Wayne

+0

그런 설정이없는 것 같습니다. 일부 정보는 여기 : http://askubuntu.com/questions/32298/prefer-a-ipv4-dns-lookups-before-aaaaipv6-lookups. – nos

답변

3

이 솔루션은, C에 대한 PHP는 확실하지 않다. getaddrinfo를 호출 할 때 조회 할 항목에 대한 '힌트'를 제공하는 struct addrinfo를 전달합니다. 이 대답에 적용 듯 나의 코멘트에서 아래 복사

struct addrinfo *res; 
    struct addrinfo hints; 
    memset(&hints, 0, sizeof(hints)); 
    hints.ai_family = PF_INET; 
    hints.ai_flags = AI_PASSIVE; 
    hints.ai_socktype = SOCK_STREAM; 

    getaddrinfo("localhost", "80", &hints, &res); 

아래 예 :

은 그냥 '기본값'을 제공한다 getaddrinfo에 대한 래퍼 함수를 ​​만듭니다. 그런 다음 응용 프로그램 전체에서 랩퍼 기능을 사용하십시오. ipv6이 실행 중일 때 함수의 내부 '기본값'을 변경합니다.

+0

고마워, 내가 글로벌 솔루션을 찾고 있어요. 기본 설정과 동일합니다. – Wayne

+2

'defaults'를 제공하는 getaddrinfo에 대한 래퍼 함수를 ​​생성하면됩니다. 그런 다음 응용 프로그램 전체에서 랩퍼 기능을 사용하십시오. ipv6이 실행 중일 때 함수의 내부 'default'를 변경합니다. – goji

1

Linux의 경우 getaddrinfo()의 동작은 /etc/gai.conf으로 조정할 수 있습니다. 이 파일을 사용하여 IPv6 주소가 반환되지 않도록 할 수는 없지만이 파일을 사용하여 IPv6 주소보다 IPv4 주소의 우선 순위를 지정할 수 있습니다.

그래도 PHP/Curl에서 AI_ADDRCONFIG 플래그를 getaddrinfo()으로 전달하면 현재 컴퓨터에 IPv6 주소가 구성된 경우에만 IPv6 주소가 반환됩니다.