2014-04-02 5 views
1

파이썬 스크립트는 getaddrinfo()를 사용하여 주소를 구문 분석 한 다음 주소를 'bind'() 할 수 있습니다. 스크립트의python에서 getaddrinfo 오류가 발생했습니다.

발췌문 : 실행될 때

def fetch_ipv6_address(addr="::1"): 
    # try to detect whether IPv6 is supported at the present system and 
    # fetch the IPv6 address of localhost. 
    if not socket.has_ipv6: 
     raise Exception("the local machine has no IPv6 support enabled") 

    addrs = socket.getaddrinfo(addr, 0, socket.AF_INET6, socket.SOCK_RAW, 0x73, socket.AI_PASSIVE) 
    .... 
    .... 

sockaddr = fetch_ipv6_address("::1") 
RX = socket.socket(socket.AF_INET6, socket.SOCK_RAW, 0x73) 
RX.bind(sockaddr) 

스크립트 오류가 발생합니다 :

# ./ip6_l2tp_ip.py 
Traceback (most recent call last): 
    File "./ip6_l2tp_ip.py", line 36, in <module> 
    sockaddr = fetch_ipv6_address("::1") 
    File "./ip6_l2tp_ip.py", line 26, in fetch_ipv6_address 
    addrs = socket.getaddrinfo(addr, 0, socket.AF_INET6, socket.SOCK_RAW, 0x73, socket.AI_PASSIVE) 
socket.gaierror: [Errno -8] Servname not supported for ai_socktype 

한다 getaddrinfo() 인수에 어떤 문제가 있는지에 대한 어떤 생각?

감사합니다.

+0

여기서 '0x73'은 무엇입니까? – glglgl

답변

1

0은 두 번째 인수 인 is converted으로 길이가 길거나 int 인 경우, 기본 API 호출이 ai_servname 필드에 대해 지원하는 형식에 맞도록합니다.

OTOH는 the docs

o For internet address families, if you specify servname while you set 
    ai_socktype to SOCK_RAW, getaddrinfo() will raise an error, because 
    service names are not defined for the internet SOCK_RAW space. 

당신이 None0, 그것은 작동 교체하는 경우 있음을 작성합니다.

+0

그게 효과가 있어요. 감사! – Maddy