Changeset 64 for trunk/pdns/pdns/tcpreceiver.cc
- Timestamp:
- 12/10/02 14:36:26 (10 years ago)
- Files:
-
- 1 modified
-
trunk/pdns/pdns/tcpreceiver.cc (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/pdns/pdns/tcpreceiver.cc
r61 r64 439 439 #if !WIN32 && HAVE_IPV6 440 440 for(vector<string>::const_iterator laddr=locals6.begin();laddr!=locals6.end();++laddr) { 441 struct sockaddr_in6 local;442 441 int s=socket(AF_INET6,SOCK_STREAM,0); 443 442 444 443 if(s<0) 445 444 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; 454 455 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 } 457 461 458 462 int tmp=1; … … 462 466 } 463 467 464 if(bind(s, ( sockaddr*)&local,sizeof(local))<0) {468 if(bind(s, (const sockaddr*)&locala, sizeof(locala))<0) { 465 469 L<<Logger::Error<<"binding to TCP socket: "<<strerror(errno)<<endl; 466 470 throw AhuException("Unable to bind to TCPv6 socket");