diff --git a/src/net/dns/dns_config_service_posix.cc b/src/net/dns/dns_config_service_posix.cc
index 5a4aead0ac..81e805c64b 100644
--- a/src/net/dns/dns_config_service_posix.cc
+++ b/src/net/dns/dns_config_service_posix.cc
@@ -151,7 +151,7 @@ ConfigParsePosixResult ReadDnsConfig(DnsConfig* dns_config) {
 #if !defined(OS_ANDROID)
   ConfigParsePosixResult result;
 // TODO(fuchsia): Use res_ninit() when it's implemented on Fuchsia.
-#if defined(OS_OPENBSD) || defined(OS_FUCHSIA)
+#if defined(OS_OPENBSD) || defined(OS_FUCHSIA) || defined(__UCLIBC__)
   // Note: res_ninit in glibc always returns 0 and sets RES_INIT.
   // res_init behaves the same way.
   memset(&_res, 0, sizeof(_res));
diff --git a/src/net/dns/dns_reloader.cc b/src/net/dns/dns_reloader.cc
index 0672e711af..a126fd5618 100644
--- a/src/net/dns/dns_reloader.cc
+++ b/src/net/dns/dns_reloader.cc
@@ -60,20 +60,32 @@ class DnsReloader : public NetworkChangeNotifier::DNSObserver {
     if (!reload_state) {
       auto new_reload_state = std::make_unique<ReloadState>();
       new_reload_state->resolver_generation = resolver_generation_;
+#ifndef __UCLIBC__
       res_ninit(&_res);
+#else
+      res_init();
+#endif
       tls_reload_state_.Set(std::move(new_reload_state));
     } else if (reload_state->resolver_generation != resolver_generation_) {
       reload_state->resolver_generation = resolver_generation_;
       // It is safe to call res_nclose here since we know res_ninit will have
       // been called above.
+#ifndef __UCLIBC__
       res_nclose(&_res);
       res_ninit(&_res);
+#else
+      res_init();
+#endif
     }
   }
 
  private:
   struct ReloadState {
-    ~ReloadState() { res_nclose(&_res); }
+    ~ReloadState() {
+#ifndef __UCLIBC__
+      res_nclose(&_res);
+#endif
+    }
 
     int resolver_generation;
   };