- struct irc_sockaddr *local;
- int fd;
- local = irc_in_addr_valid(&ResolverAddr.addr) ? &ResolverAddr : &VirtualHost;
- fd = os_socket(local, SOCK_DGRAM, "Resolver UDP socket");
- if (fd < 0) return;
- if (!socket_add(&res_socket, res_readreply, NULL, SS_DATAGRAM,
- SOCK_EVENT_READABLE, fd)) return;
- timer_init(&res_timeout);
+ int fd = os_socket(&VirtualHost_v4, SOCK_DGRAM, "Resolver UDPv4 socket");
+ if (fd >= 0)
+ socket_add(&res_socket_v4, res_readreply, NULL,
+ SS_DATAGRAM, SOCK_EVENT_READABLE, fd);
+ }
+
+ if (!s_active(&res_socket_v6))
+ {
+ int fd = os_socket(&VirtualHost_v6, SOCK_DGRAM, "Resolver UDPv6 socket");
+ if (fd >= 0)
+ socket_add(&res_socket_v6, res_readreply, NULL,
+ SS_DATAGRAM, SOCK_EVENT_READABLE, fd);