+ sockaddr_t sa;
+ memcpy(&sa, ai->ai_addr, ai->ai_addrlen);
+ freeaddrinfo(ai);
+
+ switch(sa.sa.sa_family) {
+ case AF_INET:
+ return ntohs(sa.in.sin_port);
+
+ case AF_INET6:
+ return ntohs(sa.in6.sin6_port);
+
+ default:
+ logger(DEBUG_ALWAYS, LOG_WARNING, "Unknown address family %d for service %s.", sa.sa.sa_family, service);
+ return 0;
+ }
+}