- /* Get nameservers from resolv.conf, fallback to localhost */
- f = __fopen_rb_ca("/etc/resolv.conf", &_f, _buf, sizeof _buf);
- if (f) for (nns=0; nns<3 && fgets(line, sizeof line, f); ) {
- if (!strncmp(line, "options", 7) && isspace(line[7])) {
- unsigned long x;
- char *p, *z;
- p = strstr(line, "timeout:");
- if (p && isdigit(p[8])) {
- p += 8;
- x = strtoul(p, &z, 10);
- if (z != p) timeout = x < 30 ? x*1000 : 30000;
- }
- p = strstr(line, "attempts:");
- if (p && isdigit(p[9])) {
- p += 9;
- x = strtoul(p, &z, 10);
- if (z != p) attempts = x < 10 ? x : 10;
- if (!attempts) attempts = 1;
- }
+ timeout = 1000*conf->timeout;
+ attempts = conf->attempts;
+
+ for (nns=0; nns<conf->nns; nns++) {
+ const struct address *iplit = &conf->ns[nns];
+ if (iplit->family == AF_INET) {
+ memcpy(&ns[nns].sin.sin_addr, iplit->addr, 4);
+ ns[nns].sin.sin_port = htons(53);
+ ns[nns].sin.sin_family = AF_INET;
+ } else {
+ sl = sizeof sa.sin6;
+ memcpy(&ns[nns].sin6.sin6_addr, iplit->addr, 16);
+ ns[nns].sin6.sin6_port = htons(53);
+ ns[nns].sin6.sin6_scope_id = iplit->scopeid;
+ ns[nns].sin6.sin6_family = family = AF_INET6;