+ return -1;
+}
+
+int net_bind(const struct addrinfo *addrinfo, int fds[2])
+{
+ const struct addrinfo *ipv6 = NULL;
+ const struct addrinfo *ipv4 = NULL;
+ unsigned int num;
+
+ if (addrinfo->ai_family == AF_INET)
+ ipv4 = addrinfo;
+ else if (addrinfo->ai_family == AF_INET6)
+ ipv6 = addrinfo;
+
+ if (addrinfo->ai_next) {
+ if (addrinfo->ai_next->ai_family == AF_INET)
+ ipv4 = addrinfo->ai_next;
+ else if (addrinfo->ai_next->ai_family == AF_INET6)
+ ipv6 = addrinfo->ai_next;
+ }
+
+ num = 0;
+ /* Take IPv6 first, since it might bind to IPv4 port too. */
+ if (ipv6) {
+ if ((fds[num] = make_listen_fd(ipv6)) >= 0)
+ num++;
+ else
+ ipv6 = NULL;
+ }
+ if (ipv4) {
+ if ((fds[num] = make_listen_fd(ipv4)) >= 0)
+ num++;
+ else
+ ipv4 = NULL;
+ }
+ if (num == 0)
+ return -1;
+
+ return num;