+ if(errno == EADDRINUSE) {
+ /* If this port is in use for any address family, avoid it. */
+ success = false;
+ break;
+ } else {
+ continue;
+ }
+ }
+
+ if(!setup_listen_socket(mesh, tcp_fd, aip->ai_family)) {
+ closesocket(tcp_fd);
+ success = false;
+ break;
+ }
+
+ /* If TCP worked, then we require that UDP works as well. */
+
+ int udp_fd = socket(aip->ai_family, SOCK_DGRAM, IPPROTO_UDP);
+
+ if(udp_fd == -1) {
+ closesocket(tcp_fd);
+ success = false;
+ break;
+ }
+
+ if(bind(udp_fd, aip->ai_addr, aip->ai_addrlen) || !setup_vpn_in_socket(mesh, udp_fd, aip->ai_family)) {
+ closesocket(tcp_fd);
+ closesocket(udp_fd);
+ success = false;
+ break;