hints.ai_family = PF_UNSPEC;
error = getaddrinfo(host.c_str(), NULL, &hints, &res);
if (! error) {
- struct sockaddr_in *sin;
- struct sockaddr_in6 *sin6;
- addr->addr.ss_family = res->ai_family;
- switch(res->ai_family) {
- case AF_INET:
- sin = (struct sockaddr_in *) res->ai_addr;
- memcpy(&addr->addr4.sin_addr, &sin->sin_addr,
- sizeof(sin->sin_addr));
- break;
- case AF_INET6:
- sin6 = (struct sockaddr_in6 *) res->ai_addr;
- memcpy(&addr->addr6.sin6_addr, &sin6->sin6_addr,
- sizeof(sin6->sin6_addr));
- break;
- default:
- break;
- };
+ addr->set_sockaddr((sockaddr*)res->ai_addr);
addr->set_port(std::atoi(port.c_str()));
freeaddrinfo(res);
return 0;