diff --git a/DnsProxyListener.cpp b/DnsProxyListener.cpp
index dc8cd96..974cd51 100644
--- a/DnsProxyListener.cpp
+++ b/DnsProxyListener.cpp
@@ -27,7 +27,6 @@
 #include <stdlib.h>
 #include <string.h>
 #include <sys/socket.h>
-#include <sys/types.h>
 
 #define LOG_TAG "resolv"
 
diff --git a/getaddrinfo.cpp b/getaddrinfo.cpp
index cc5e7ff..4207251 100644
--- a/getaddrinfo.cpp
+++ b/getaddrinfo.cpp
@@ -50,7 +50,6 @@
 #include <sys/param.h>
 #include <sys/socket.h>
 #include <sys/stat.h>
-#include <sys/types.h>
 #include <sys/un.h>
 #include <unistd.h>
 
@@ -112,14 +111,14 @@
 
 typedef union {
     HEADER hdr;
-    u_char buf[MAXPACKET];
+    uint8_t buf[MAXPACKET];
 } querybuf;
 
 struct res_target {
     struct res_target* next;
     const char* name;  /* domain name */
     int qclass, qtype; /* class and type of query */
-    u_char* answer;    /* buffer to put answer */
+    uint8_t* answer;   /* buffer to put answer */
     int anslen;        /* size of answer buffer */
     int n;             /* result length */
 };
@@ -137,7 +136,7 @@
 static int get_portmatch(const struct addrinfo*, const char*);
 static int get_port(const struct addrinfo*, const char*, int);
 static const struct afd* find_afd(int);
-static int ip6_str2scopeid(const char*, struct sockaddr_in6*, u_int32_t*);
+static int ip6_str2scopeid(const char*, struct sockaddr_in6*, uint32_t*);
 
 static struct addrinfo* getanswer(const querybuf*, int, const char*, int, const struct addrinfo*,
                                   int* herrno);
@@ -646,7 +645,7 @@
 
     error = explore_numeric(pai, addr, servname, res, hostname);
     if (error == 0) {
-        u_int32_t scopeid;
+        uint32_t scopeid;
 
         for (cur = *res; cur; cur = cur->ai_next) {
             if (cur->ai_family != AF_INET6) continue;
@@ -787,8 +786,8 @@
 }
 
 // Convert a string to a scope identifier.
-static int ip6_str2scopeid(const char* scope, struct sockaddr_in6* sin6, u_int32_t* scopeid) {
-    u_long lscopeid;
+static int ip6_str2scopeid(const char* scope, struct sockaddr_in6* sin6, uint32_t* scopeid) {
+    uint64_t lscopeid;
     struct in6_addr* a6;
     char* ep;
 
@@ -814,7 +813,7 @@
     // try to convert to a numeric id as a last resort
     errno = 0;
     lscopeid = strtoul(scope, &ep, 10);
-    *scopeid = (u_int32_t)(lscopeid & 0xffffffffUL);
+    *scopeid = (uint32_t)(lscopeid & 0xffffffffUL);
     if (errno == 0 && ep && *ep == '\0' && *scopeid == lscopeid)
         return 0;
     else
@@ -845,9 +844,9 @@
     const struct afd* afd;
     char* canonname;
     const HEADER* hp;
-    const u_char* cp;
+    const uint8_t* cp;
     int n;
-    const u_char* eom;
+    const uint8_t* eom;
     char *bp, *ep;
     int type, ancount, qdcount;
     int haveanswer, had_error;
@@ -1583,7 +1582,7 @@
  * Caller must parse answer and determine whether it answers the question.
  */
 static int res_queryN(const char* name, res_target* target, res_state res, int* herrno) {
-    u_char buf[MAXPACKET];
+    uint8_t buf[MAXPACKET];
     HEADER* hp;
     int n;
     struct res_target* t;
@@ -1597,7 +1596,7 @@
     ancount = 0;
 
     for (t = target; t; t = t->next) {
-        u_char* answer;
+        uint8_t* answer;
         int anslen;
 
         hp = (HEADER*) (void*) t->answer;
@@ -1687,7 +1686,7 @@
 static int res_searchN(const char* name, res_target* target, res_state res, int* herrno) {
     const char* cp;
     HEADER* hp;
-    u_int dots;
+    uint32_t dots;
     int ret, saved_herrno;
     int got_nodata = 0, got_servfail = 0, tried_as_is = 0;
 
diff --git a/gethnamaddr.cpp b/gethnamaddr.cpp
index fb41f18..66f3a8e 100644
--- a/gethnamaddr.cpp
+++ b/gethnamaddr.cpp
@@ -67,7 +67,6 @@
 #include <string.h>
 #include <sys/param.h>
 #include <sys/socket.h>
-#include <sys/types.h>
 #include <sys/un.h>
 #include <unistd.h>
 #include <functional>
@@ -99,7 +98,7 @@
 
 typedef union {
     HEADER hdr;
-    u_char buf[MAXPACKET];
+    uint8_t buf[MAXPACKET];
 } querybuf;
 
 typedef union {
@@ -149,10 +148,10 @@
                                  res_state res, struct hostent* hent, char* buf, size_t buflen,
                                  int* he) {
     const HEADER* hp;
-    const u_char* cp;
+    const uint8_t* cp;
     int n;
     size_t qlen;
-    const u_char *eom, *erdata;
+    const uint8_t *eom, *erdata;
     char *bp, **hap, *ep;
     int ancount, qdcount;
     int haveanswer, had_error;
@@ -344,7 +343,7 @@
                     bp += nn;
                 }
 
-                bp += sizeof(align) - (size_t)((u_long) bp % sizeof(align));
+                bp += sizeof(align) - (size_t)((uintptr_t)bp % sizeof(align));
 
                 if (bp + n >= ep) {
                     LOG(DEBUG) << __func__ << ": size (" << n << ") too big";
@@ -437,7 +436,7 @@
      * disallow names consisting only of digits/dots, unless
      * they end in a dot.
      */
-    if (isdigit((u_char) name[0])) {
+    if (isdigit((uint8_t)name[0])) {
         for (const char* cp = name;; ++cp) {
             if (!*cp) {
                 if (*--cp == '.') break;
@@ -448,10 +447,10 @@
                  */
                 goto fake;
             }
-            if (!isdigit((u_char) *cp) && *cp != '.') break;
+            if (!isdigit((uint8_t)*cp) && *cp != '.') break;
         }
     }
-    if ((isxdigit((u_char) name[0]) && strchr(name, ':') != NULL) || name[0] == ':') {
+    if ((isxdigit((uint8_t)name[0]) && strchr(name, ':') != NULL) || name[0] == ':') {
         for (const char* cp = name;; ++cp) {
             if (!*cp) {
                 if (*--cp == '.') break;
@@ -462,7 +461,7 @@
                  */
                 goto fake;
             }
-            if (!isxdigit((u_char) *cp) && *cp != ':' && *cp != '.') break;
+            if (!isxdigit((uint8_t)*cp) && *cp != ':' && *cp != '.') break;
         }
     }
 
@@ -506,7 +505,7 @@
                                                    struct hostent* hp, char* buf, size_t buflen,
                                                    const struct android_net_context* netcontext,
                                                    NetworkDnsEventReported* event) {
-    const u_char* uaddr = (const u_char*) addr;
+    const uint8_t* uaddr = (const uint8_t*)addr;
     socklen_t size;
     struct getnamaddr info;
 
@@ -666,7 +665,7 @@
     if (hp->h_addrtype != AF_INET || hp->h_length != NS_INADDRSZ) return;
     map_param(hp);
     for (char** ap = hp->h_addr_list; *ap; ap++) {
-        int i = (int) (sizeof(align) - (size_t)((u_long) *bpp % sizeof(align)));
+        int i = (int)(sizeof(align) - (size_t)((uintptr_t)*bpp % sizeof(align)));
 
         if (ep - *bpp < (i + NS_IN6ADDRSZ)) {
             /* Out of memory.  Truncate address list here.  XXX */
diff --git a/res_cache.cpp b/res_cache.cpp
index 5dc2c82..3b75849 100644
--- a/res_cache.cpp
+++ b/res_cache.cpp
@@ -697,18 +697,18 @@
  *
  * Return 0 if not found.
  */
-static u_long answer_getNegativeTTL(ns_msg handle) {
+static uint32_t answer_getNegativeTTL(ns_msg handle) {
     int n, nscount;
-    u_long result = 0;
+    uint32_t result = 0;
     ns_rr rr;
 
     nscount = ns_msg_count(handle, ns_s_ns);
     for (n = 0; n < nscount; n++) {
         if ((ns_parserr(&handle, ns_s_ns, n, &rr) == 0) && (ns_rr_type(rr) == ns_t_soa)) {
-            const u_char* rdata = ns_rr_rdata(rr);          // find the data
-            const u_char* edata = rdata + ns_rr_rdlen(rr);  // add the len to find the end
+            const uint8_t* rdata = ns_rr_rdata(rr);          // find the data
+            const uint8_t* edata = rdata + ns_rr_rdlen(rr);  // add the len to find the end
             int len;
-            u_long ttl, rec_result = ns_rr_ttl(rr);
+            uint32_t ttl, rec_result = rr.ttl;
 
             // find the MINIMUM-TTL field from the blob of binary data for this record
             // skip the server name
@@ -750,10 +750,10 @@
  * In case of parse error zero (0) is returned which
  * indicates that the answer shall not be cached.
  */
-static u_long answer_getTTL(const void* answer, int answerlen) {
+static uint32_t answer_getTTL(const void* answer, int answerlen) {
     ns_msg handle;
     int ancount, n;
-    u_long result, ttl;
+    uint32_t result, ttl;
     ns_rr rr;
 
     result = 0;
@@ -767,7 +767,7 @@
         } else {
             for (n = 0; n < ancount; n++) {
                 if (ns_parserr(&handle, ns_s_an, n, &rr) == 0) {
-                    ttl = ns_rr_ttl(rr);
+                    ttl = rr.ttl;
                     if (n == 0 || ttl < result) {
                         result = ttl;
                     }
@@ -902,14 +902,6 @@
     std::unordered_map<int, uint32_t> dns_event_subsampling_map;
 };
 
-// A helper class for the Clang Thread Safety Analysis to deal with
-// std::unique_lock.
-class SCOPED_CAPABILITY ScopedAssumeLocked {
-  public:
-    explicit ScopedAssumeLocked(std::mutex& mutex) ACQUIRE(mutex) {}
-    ~ScopedAssumeLocked() RELEASE() {}
-};
-
 // lock protecting everything in the resolve_cache_info structs (next ptr, etc)
 static std::mutex cache_mutex;
 static std::condition_variable cv;
@@ -1175,7 +1167,7 @@
     }
     /* lookup cache */
     std::unique_lock lock(cache_mutex);
-    ScopedAssumeLocked assume_lock(cache_mutex);
+    android::base::ScopedLockAssertion assume_lock(cache_mutex);
     cache = find_named_cache_locked(netid);
     if (cache == nullptr) {
         return RESOLV_CACHE_UNSUPPORTED;
@@ -1259,7 +1251,7 @@
     Entry key[1];
     Entry* e;
     Entry** lookup;
-    u_long ttl;
+    uint32_t ttl;
     Cache* cache = NULL;
 
     /* don't assume that the query has already been cached
diff --git a/res_comp.cpp b/res_comp.cpp
index 17c1fe9..c9889cb 100644
--- a/res_comp.cpp
+++ b/res_comp.cpp
@@ -73,8 +73,6 @@
 #include <arpa/nameser.h>
 #include <ctype.h>
 #include <netinet/in.h>
-#include <sys/param.h>
-#include <sys/types.h>
 #include <string.h>
 #include <unistd.h>
 
@@ -87,7 +85,7 @@
  * 'dst' is a pointer to a buffer of size 'dstsiz' for the result.
  * Return size of compressed name or -1 if there was an error.
  */
-int dn_expand(const u_char* msg, const u_char* eom, const u_char* src, char* dst, int dstsiz) {
+int dn_expand(const uint8_t* msg, const uint8_t* eom, const uint8_t* src, char* dst, int dstsiz) {
     int n = ns_name_uncompress(msg, eom, src, dst, (size_t) dstsiz);
 
     if (n > 0 && dst[0] == '.') dst[0] = '\0';
@@ -99,16 +97,16 @@
  * Return the size of the compressed name or -1.
  * 'length' is the size of the array pointed to by 'comp_dn'.
  */
-int dn_comp(const char* src, u_char* dst, int dstsiz, u_char** dnptrs, u_char** lastdnptr) {
-    return (ns_name_compress(src, dst, (size_t) dstsiz, (const u_char**) dnptrs,
-                             (const u_char**) lastdnptr));
+int dn_comp(const char* src, uint8_t* dst, int dstsiz, uint8_t** dnptrs, uint8_t** lastdnptr) {
+    return (ns_name_compress(src, dst, (size_t)dstsiz, (const uint8_t**)dnptrs,
+                             (const uint8_t**)lastdnptr));
 }
 
 /*
  * Skip over a compressed domain name. Return the size or -1.
  */
-int dn_skipname(const u_char* ptr, const u_char* eom) {
-    const u_char* saveptr = ptr;
+int dn_skipname(const uint8_t* ptr, const uint8_t* eom) {
+    const uint8_t* saveptr = ptr;
 
     if (ns_name_skip(&ptr, eom) == -1) return (-1);
     return (ptr - saveptr);
diff --git a/res_debug.cpp b/res_debug.cpp
index f249456..383c445 100644
--- a/res_debug.cpp
+++ b/res_debug.cpp
@@ -111,6 +111,7 @@
 #include <android-base/stringprintf.h>
 #include <ctype.h>
 #include <errno.h>
+#include <inttypes.h>
 #include <math.h>
 #include <netdb.h>
 #include <netdutils/Slice.h>
@@ -161,14 +162,13 @@
             StringAppendF(&s, ";;\t%s, type = %s, class = %s\n", ns_rr_name(rr),
                           p_type(ns_rr_type(rr)), p_class(ns_rr_class(rr)));
         else if (section == ns_s_ar && ns_rr_type(rr) == ns_t_opt) {
-            size_t rdatalen, ttl;
+            size_t rdatalen;
             uint16_t optcode, optlen;
 
             rdatalen = ns_rr_rdlen(rr);
-            ttl = ns_rr_ttl(rr);
-            StringAppendF(&s, "; EDNS: version: %zu, udp=%u, flags=%04zx\n", (ttl >> 16) & 0xff,
-                          ns_rr_class(rr), ttl & 0xffff);
-            const u_char* cp = ns_rr_rdata(rr);
+            StringAppendF(&s, "; EDNS: version: %" PRIu32 ", udp=%u, flags=%" PRIu32 "\n",
+                          (rr.ttl >> 16) & 0xff, ns_rr_class(rr), rr.ttl & 0xffff);
+            const uint8_t* cp = ns_rr_rdata(rr);
             while (rdatalen <= ns_rr_rdlen(rr) && rdatalen >= 4) {
                 int i;
 
@@ -210,7 +210,7 @@
             }
         } else {
             auto buf = std::make_unique<char[]>(buflen);
-            n = ns_sprintrr(handle, &rr, NULL, NULL, buf.get(), (u_int)buflen);
+            n = ns_sprintrr(handle, &rr, NULL, NULL, buf.get(), (uint32_t)buflen);
             if (n < 0) {
                 if (errno == ENOSPC) {
                     if (buflen < 131072) {
@@ -236,12 +236,12 @@
  * Print the contents of a query.
  * This is intended to be primarily a debugging routine.
  */
-void res_pquery(const u_char* msg, int len) {
+void res_pquery(const uint8_t* msg, int len) {
     if (!WOULD_LOG(VERBOSE)) return;
 
     ns_msg handle;
     int qdcount, ancount, nscount, arcount;
-    u_int opcode, rcode, id;
+    uint32_t opcode, rcode, id;
 
     if (ns_initparse(msg, len, &handle) < 0) {
         PLOG(VERBOSE) << "ns_initparse failed";
diff --git a/res_debug.h b/res_debug.h
index cb47b90..a0cc6ae 100644
--- a/res_debug.h
+++ b/res_debug.h
@@ -16,10 +16,10 @@
 
 #pragma once
 
-#include <sys/types.h>
+#include <stdint.h>
 
 // TODO: use netdutils::Slice for (msg, len).
-void res_pquery(const u_char* msg, int len);
+void res_pquery(const uint8_t* msg, int len);
 
 // Thread-unsafe functions returning pointers to static buffers :-(
 // TODO: switch all res_debug to std::string
diff --git a/res_init.cpp b/res_init.cpp
index 55c5afe..c59e126 100644
--- a/res_init.cpp
+++ b/res_init.cpp
@@ -75,7 +75,6 @@
 #include <sys/param.h>
 #include <sys/socket.h>
 #include <sys/time.h>
-#include <sys/types.h>
 
 #include <arpa/inet.h>
 #include <arpa/nameser.h>
diff --git a/res_mkquery.cpp b/res_mkquery.cpp
index 002f4e3..5dde9be 100644
--- a/res_mkquery.cpp
+++ b/res_mkquery.cpp
@@ -78,7 +78,6 @@
 #include <netdb.h>
 #include <netinet/in.h>
 #include <string.h>
-#include <sys/types.h>
 
 #include <android-base/logging.h>
 
@@ -98,19 +97,19 @@
  * Form all types of queries.
  * Returns the size of the result or -1.
  */
-int res_nmkquery(res_state statp, int op,    /* opcode of query */
-                 const char* dname,          /* domain name */
-                 int cl, int type,           /* class and type of query */
-                 const u_char* data,         /* resource record data */
-                 int datalen,                /* length of data */
-                 const u_char* /*newrr_in*/, /* new rr for modify or append */
-                 u_char* buf,                /* buffer to put query */
-                 int buflen)                 /* size of buffer */
+int res_nmkquery(res_state statp, int op,     /* opcode of query */
+                 const char* dname,           /* domain name */
+                 int cl, int type,            /* class and type of query */
+                 const uint8_t* data,         /* resource record data */
+                 int datalen,                 /* length of data */
+                 const uint8_t* /*newrr_in*/, /* new rr for modify or append */
+                 uint8_t* buf,                /* buffer to put query */
+                 int buflen)                  /* size of buffer */
 {
     HEADER* hp;
-    u_char *cp, *ep;
+    uint8_t *cp, *ep;
     int n;
-    u_char *dnptrs[20], **dpp, **lastdnptr;
+    uint8_t *dnptrs[20], **dpp, **lastdnptr;
 
     LOG(DEBUG) << __func__ << ": (" << _res_opcodes[op] << ", " << p_class(cl) << ", "
                << p_type(type) << ")";
@@ -194,13 +193,13 @@
 }
 
 int res_nopt(res_state statp, int n0, /* current offset in buffer */
-             u_char* buf,             /* buffer to put query */
+             uint8_t* buf,            /* buffer to put query */
              int buflen,              /* size of buffer */
              int anslen)              /* UDP answer buffer size */
 {
     HEADER* hp;
-    u_char *cp, *ep;
-    u_int16_t flags = 0;
+    uint8_t *cp, *ep;
+    uint16_t flags = 0;
 
     LOG(DEBUG) << __func__;
 
diff --git a/res_query.cpp b/res_query.cpp
index 4bfdf04..f54ff3f 100644
--- a/res_query.cpp
+++ b/res_query.cpp
@@ -79,7 +79,6 @@
 #include <netdb.h>
 #include <netinet/in.h>
 #include <sys/param.h>
-#include <sys/types.h>
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
@@ -108,12 +107,12 @@
  */
 int res_nquery(res_state statp, const char* name,  // domain name
                int cl, int type,                   // class and type of query
-               u_char* answer,                     // buffer to put answer
+               uint8_t* answer,                    // buffer to put answer
                int anslen,                         // size of answer buffer
                int* herrno)                        // legacy and extended h_errno
                                                    // NETD_RESOLV_H_ERRNO_EXT_*
 {
-    u_char buf[MAXPACKET];
+    uint8_t buf[MAXPACKET];
     HEADER* hp = (HEADER*) (void*) answer;
     int n;
     int rcode = NOERROR;
@@ -209,14 +208,14 @@
  */
 int res_nsearch(res_state statp, const char* name, /* domain name */
                 int cl, int type,                  /* class and type of query */
-                u_char* answer,                    /* buffer to put answer */
+                uint8_t* answer,                   /* buffer to put answer */
                 int anslen,                        /* size of answer */
                 int* herrno)                       /* legacy and extended
                                                       h_errno NETD_RESOLV_H_ERRNO_EXT_* */
 {
     const char* cp;
     HEADER* hp = (HEADER*) (void*) answer;
-    u_int dots;
+    uint32_t dots;
     int ret, saved_herrno;
     int got_nodata = 0, got_servfail = 0, root_on_list = 0;
     int tried_as_is = 0;
@@ -332,10 +331,10 @@
  * removing a trailing dot from name if domain is NULL.
  */
 int res_nquerydomain(res_state statp, const char* name, const char* domain, int cl,
-                     int type,       /* class and type of query */
-                     u_char* answer, /* buffer to put answer */
-                     int anslen,     /* size of answer */
-                     int* herrno)    /* legacy and extended h_errno NETD_RESOLV_H_ERRNO_EXT_* */
+                     int type,        /* class and type of query */
+                     uint8_t* answer, /* buffer to put answer */
+                     int anslen,      /* size of answer */
+                     int* herrno)     /* legacy and extended h_errno NETD_RESOLV_H_ERRNO_EXT_* */
 {
     char nbuf[MAXDNAME];
     const char* longname = nbuf;
diff --git a/res_send.cpp b/res_send.cpp
index 8b416b0..be5ec0b 100644
--- a/res_send.cpp
+++ b/res_send.cpp
@@ -79,7 +79,6 @@
 #include <sys/param.h>
 #include <sys/socket.h>
 #include <sys/time.h>
-#include <sys/types.h>
 #include <sys/uio.h>
 
 #include <arpa/inet.h>
@@ -138,10 +137,10 @@
 
 static int get_salen(const struct sockaddr*);
 static struct sockaddr* get_nsaddr(res_state, size_t);
-static int send_vc(res_state, res_params* params, const u_char*, int, u_char*, int, int*, int,
+static int send_vc(res_state, res_params* params, const uint8_t*, int, uint8_t*, int, int*, int,
                    time_t*, int*, int*);
-static int send_dg(res_state, res_params* params, const u_char*, int, u_char*, int, int*, int, int*,
-                   int*, time_t*, int*, int*);
+static int send_dg(res_state, res_params* params, const uint8_t*, int, uint8_t*, int, int*, int,
+                   int*, int*, time_t*, int*, int*);
 static void dump_error(const char*, const struct sockaddr*, int);
 
 static int sock_eq(struct sockaddr*, struct sockaddr*);
@@ -349,8 +348,8 @@
  * author:
  *	paul vixie, 29may94
  */
-int res_nameinquery(const char* name, int type, int cl, const u_char* buf, const u_char* eom) {
-    const u_char* cp = buf + HFIXEDSZ;
+int res_nameinquery(const char* name, int type, int cl, const uint8_t* buf, const uint8_t* eom) {
+    const uint8_t* cp = buf + HFIXEDSZ;
     int qdcount = ntohs(((const HEADER*) (const void*) buf)->qdcount);
 
     while (qdcount-- > 0) {
@@ -379,9 +378,9 @@
  * author:
  *	paul vixie, 29may94
  */
-int res_queriesmatch(const u_char* buf1, const u_char* eom1, const u_char* buf2,
-                     const u_char* eom2) {
-    const u_char* cp = buf1 + HFIXEDSZ;
+int res_queriesmatch(const uint8_t* buf1, const uint8_t* eom1, const uint8_t* buf2,
+                     const uint8_t* eom2) {
+    const uint8_t* cp = buf1 + HFIXEDSZ;
     int qdcount = ntohs(((const HEADER*) (const void*) buf1)->qdcount);
 
     if (buf1 + HFIXEDSZ > eom1 || buf2 + HFIXEDSZ > eom2) return (-1);
@@ -414,7 +413,7 @@
     return event->mutable_dns_query_events()->add_dns_query_event();
 }
 
-int res_nsend(res_state statp, const u_char* buf, int buflen, u_char* ans, int anssiz, int* rcode,
+int res_nsend(res_state statp, const uint8_t* buf, int buflen, uint8_t* ans, int anssiz, int* rcode,
               uint32_t flags) {
     int gotsomewhere, terrno, v_circuit, resplen, n;
     ResolvCacheStatus cache_status = RESOLV_CACHE_UNSUPPORTED;
@@ -552,7 +551,7 @@
             // reasonable place. In addition, maybe add stats for private DNS.
             if (!(statp->netcontext_flags & NET_CONTEXT_FLAG_USE_LOCAL_NAMESERVERS)) {
                 bool fallback = false;
-                resplen = res_tls_send(statp, Slice(const_cast<u_char*>(buf), buflen),
+                resplen = res_tls_send(statp, Slice(const_cast<uint8_t*>(buf), buflen),
                                        Slice(ans, anssiz), rcode, &fallback);
                 if (resplen > 0) {
                     LOG(DEBUG) << __func__ << ": got answer from DoT";
@@ -735,8 +734,9 @@
     return result;
 }
 
-static int send_vc(res_state statp, res_params* params, const u_char* buf, int buflen, u_char* ans,
-                   int anssiz, int* terrno, int ns, time_t* at, int* rcode, int* delay) {
+static int send_vc(res_state statp, res_params* params, const uint8_t* buf, int buflen,
+                   uint8_t* ans, int anssiz, int* terrno, int ns, time_t* at, int* rcode,
+                   int* delay) {
     *at = time(NULL);
     *delay = 0;
     const HEADER* hp = (const HEADER*) (const void*) buf;
@@ -745,7 +745,7 @@
     int nsaplen;
     int truncating, connreset, n;
     struct iovec iov[2];
-    u_char* cp;
+    uint8_t* cp;
 
     LOG(INFO) << __func__ << ": using send_vc";
 
@@ -1001,9 +1001,9 @@
     return n;
 }
 
-static int send_dg(res_state statp, res_params* params, const u_char* buf, int buflen, u_char* ans,
-                   int anssiz, int* terrno, int ns, int* v_circuit, int* gotsomewhere, time_t* at,
-                   int* rcode, int* delay) {
+static int send_dg(res_state statp, res_params* params, const uint8_t* buf, int buflen,
+                   uint8_t* ans, int anssiz, int* terrno, int ns, int* v_circuit, int* gotsomewhere,
+                   time_t* at, int* rcode, int* delay) {
     *at = time(NULL);
     *delay = 0;
     const HEADER* hp = (const HEADER*) (const void*) buf;
diff --git a/res_state.cpp b/res_state.cpp
index d4fa819..0a90733 100644
--- a/res_state.cpp
+++ b/res_state.cpp
@@ -34,7 +34,6 @@
 #include <pthread.h>
 #include <stdlib.h>
 #include <string.h>
-#include <sys/types.h>
 #include <unistd.h> /* for gettid() */
 
 #include <android-base/logging.h>
@@ -99,8 +98,7 @@
     }
     pthread_setspecific(_res_key, rt);
 
-    LOG(VERBOSE) << __func__ << ": tid=" << gettid() << ", rt=" << rt
-                 << " setting DNS state (options=" << rt->_nres->options << ")";
+    LOG(VERBOSE) << __func__ << ": tid=" << gettid() << ", rt=" << rt;
     if (res_ninit(rt->_nres) < 0) {
         /* This should not happen */
         LOG(VERBOSE) << __func__ << ": tid=" << gettid() << " rt=" << rt
diff --git a/resolv_private.h b/resolv_private.h
index f2668b5..b0bae72 100644
--- a/resolv_private.h
+++ b/resolv_private.h
@@ -89,11 +89,10 @@
 struct __res_state {
     unsigned netid;                           // NetId: cache key and socket mark
     uid_t uid;                                // uid of the app that sent the DNS lookup
-    u_long options;                           // option flags - see below.
     int nscount;                              // number of name srvers
     struct sockaddr_in nsaddr_list[MAXNS];    // address of name server
 #define nsaddr nsaddr_list[0]                 // for backward compatibility
-    u_short id;                               // current message id
+    uint16_t id;                              // current message id
     std::vector<std::string> search_domains;  // domains to search
     unsigned ndots : 4;                       // threshold for initial abs. query
     unsigned nsort : 4;                       // number of elements in sort_list[]
@@ -104,8 +103,8 @@
     } sort_list[MAXRESOLVSORT];
     unsigned _mark;       /* If non-0 SET_MARK to _mark on all request sockets */
     int _vcsock;          /* PRIVATE: for res_send VC i/o */
-    u_int _flags;         /* PRIVATE: see below */
-    u_int _pad;           /* make _u 64 bit aligned */
+    uint32_t _flags;      /* PRIVATE: see below */
+    uint32_t _pad;        /* make _u 64 bit aligned */
     union {
         /* On an 32-bit arch this means 512b total. */
         char pad[72 - 4 * sizeof(int) - 2 * sizeof(void*)];
@@ -172,23 +171,23 @@
 int res_ownok(const char*);
 int res_mailok(const char*);
 int res_dnok(const char*);
-int dn_skipname(const u_char*, const u_char*);
-void putlong(uint32_t, u_char*);
-void putshort(uint16_t, u_char*);
+int dn_skipname(const uint8_t*, const uint8_t*);
+void putlong(uint32_t, uint8_t*);
+void putshort(uint16_t, uint8_t*);
 
-int res_nameinquery(const char*, int, int, const u_char*, const u_char*);
-int res_queriesmatch(const u_char*, const u_char*, const u_char*, const u_char*);
+int res_nameinquery(const char*, int, int, const uint8_t*, const uint8_t*);
+int res_queriesmatch(const uint8_t*, const uint8_t*, const uint8_t*, const uint8_t*);
 /* Things involving a resolver context. */
 int res_ninit(res_state);
 
-int res_nquery(res_state, const char*, int, int, u_char*, int, int*);
-int res_nsearch(res_state, const char*, int, int, u_char*, int, int*);
-int res_nquerydomain(res_state, const char*, const char*, int, int, u_char*, int, int*);
-int res_nmkquery(res_state, int, const char*, int, int, const u_char*, int, const u_char*, u_char*,
-                 int);
-int res_nsend(res_state, const u_char*, int, u_char*, int, int*, uint32_t);
+int res_nquery(res_state, const char*, int, int, uint8_t*, int, int*);
+int res_nsearch(res_state, const char*, int, int, uint8_t*, int, int*);
+int res_nquerydomain(res_state, const char*, const char*, int, int, uint8_t*, int, int*);
+int res_nmkquery(res_state, int, const char*, int, int, const uint8_t*, int, const uint8_t*,
+                 uint8_t*, int);
+int res_nsend(res_state, const uint8_t*, int, uint8_t*, int, int*, uint32_t);
 void res_nclose(res_state);
-int res_nopt(res_state, int, u_char*, int, int);
+int res_nopt(res_state, int, uint8_t*, int, int);
 void res_ndestroy(res_state);
 void res_setservers(res_state, const sockaddr_union*, int);
 int res_getservers(res_state, sockaddr_union*, int);
diff --git a/resolv_static.h b/resolv_static.h
index 28abf47..8d0618b 100644
--- a/resolv_static.h
+++ b/resolv_static.h
@@ -19,7 +19,7 @@
     char* h_addr_ptrs[MAXADDRS + 1];
     char* host_aliases[MAXALIASES];
     char hostbuf[8 * 1024];
-    u_int32_t host_addr[16 / sizeof(u_int32_t)]; /* IPv4 or IPv6 */
+    uint32_t host_addr[16 / sizeof(uint32_t)]; /* IPv4 or IPv6 */
     FILE* hostf;
     int stayopen;
     const char* servent_ptr;
