Show
Ignore:
Timestamp:
12/10/02 14:36:26 (10 years ago)
Author:
ahu
Message:

lots

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/pdns/pdns/tcpreceiver.cc

    r61 r64  
    439439#if !WIN32 && HAVE_IPV6 
    440440  for(vector<string>::const_iterator laddr=locals6.begin();laddr!=locals6.end();++laddr) { 
    441     struct sockaddr_in6 local; 
    442441    int s=socket(AF_INET6,SOCK_STREAM,0);  
    443442 
    444443    if(s<0)  
    445444      throw AhuException("Unable to acquire TCPv6 socket: "+stringerror()); 
    446      
    447     memset(&local,0,sizeof(local)); 
    448     local.sin6_family=AF_INET6; 
    449     struct hostent *h; 
    450     h=gethostbyname2(laddr->c_str(),AF_INET6); 
    451    
    452     if(!h) 
    453       throw AhuException("Unable to resolve local address '"+*laddr+"'"); 
     445 
     446    sockaddr_in6 locala; 
     447    locala.sin6_port=ntohs(arg().asNum("local-port")); 
     448 
     449    if(!inet_pton(AF_INET6, laddr->c_str(), (void *)&locala.sin6_addr)) { 
     450      addrinfo *addrinfos; 
     451      addrinfo hints; 
     452      memset(&hints,0,sizeof(hints)); 
     453      hints.ai_socktype=SOCK_STREAM; 
     454      hints.ai_family=AF_INET6; 
    454455       
    455     memcpy(&local.sin6_addr.s6_addr,h->h_addr,16); 
    456     local.sin6_port=htons(arg().asNum("local-port")); 
     456      if(getaddrinfo(laddr->c_str(),arg()["local-port"].c_str(),&hints,&addrinfos))  
     457        throw AhuException("Unable to resolve local IPv6 address '"+*laddr+"'");  
     458 
     459      memcpy(&locala,addrinfos->ai_addr,addrinfos->ai_addrlen); 
     460    } 
    457461 
    458462    int tmp=1; 
     
    462466    } 
    463467 
    464     if(bind(s, (sockaddr*)&local,sizeof(local))<0) { 
     468    if(bind(s, (const sockaddr*)&locala, sizeof(locala))<0) { 
    465469      L<<Logger::Error<<"binding to TCP socket: "<<strerror(errno)<<endl; 
    466470      throw AhuException("Unable to bind to TCPv6 socket");