diff --git a/libc/Android.mk b/libc/Android.mk
index 039e17b..53a122e 100644
--- a/libc/Android.mk
+++ b/libc/Android.mk
@@ -98,6 +98,7 @@
 libc_bionic_src_files := \
     bionic/abort.cpp \
     bionic/accept.cpp \
+    bionic/accept4.cpp \
     bionic/access.cpp \
     bionic/assert.cpp \
     bionic/atof.cpp \
@@ -199,6 +200,7 @@
     bionic/sigprocmask.cpp \
     bionic/sigsuspend.cpp \
     bionic/sigwait.cpp \
+    bionic/socket.cpp \
     bionic/stat.cpp \
     bionic/statvfs.cpp \
     bionic/strerror.cpp \
@@ -268,7 +270,6 @@
     upstream-netbsd/lib/libc/gen/setjmperr.c \
     upstream-netbsd/lib/libc/gen/utime.c \
     upstream-netbsd/lib/libc/gen/utmp.c \
-    upstream-netbsd/lib/libc/inet/inet_ntop.c \
     upstream-netbsd/lib/libc/isc/ev_streams.c \
     upstream-netbsd/lib/libc/isc/ev_timers.c \
     upstream-netbsd/lib/libc/regex/regcomp.c \
@@ -364,6 +365,7 @@
     upstream-openbsd/lib/libc/net/inet_netof.c \
     upstream-openbsd/lib/libc/net/inet_network.c \
     upstream-openbsd/lib/libc/net/inet_ntoa.c \
+    upstream-openbsd/lib/libc/net/inet_ntop.c \
     upstream-openbsd/lib/libc/net/inet_pton.c \
     upstream-openbsd/lib/libc/net/ntohl.c \
     upstream-openbsd/lib/libc/net/ntohs.c \
diff --git a/libc/SYSCALLS.TXT b/libc/SYSCALLS.TXT
index 4a21582..2a891b7 100644
--- a/libc/SYSCALLS.TXT
+++ b/libc/SYSCALLS.TXT
@@ -231,13 +231,12 @@
 int     __signalfd4:signalfd4(int, const sigset_t*, size_t, int)  all
 
 # sockets
-int           socket(int, int, int)              arm,arm64,mips,mips64,x86_64
+int           __socket:socket(int, int, int)              arm,arm64,mips,mips64,x86_64
 int           socketpair(int, int, int, int*)    arm,arm64,mips,mips64,x86_64
 int           bind(int, struct sockaddr*, int)  arm,arm64,mips,mips64,x86_64
 int           __connect:connect(int, struct sockaddr*, socklen_t)   arm,arm64,mips,mips64,x86_64
 int           listen(int, int)                   arm,arm64,mips,mips64,x86_64
-int           __accept:accept(int, struct sockaddr*, socklen_t*)  arm,arm64,mips,mips64,x86_64
-int           accept4(int, struct sockaddr*, socklen_t*, int)  arm,arm64,mips,mips64,x86_64
+int           __accept4:accept4(int, struct sockaddr*, socklen_t*, int)  arm,arm64,mips,mips64,x86_64
 int           getsockname(int, struct sockaddr*, socklen_t*)  arm,arm64,mips,mips64,x86_64
 int           getpeername(int, struct sockaddr*, socklen_t*)  arm,arm64,mips,mips64,x86_64
 int           sendto(int, const void*, size_t, int, const struct sockaddr*, socklen_t)  arm,arm64,mips,mips64,x86_64
@@ -251,11 +250,10 @@
 int           sendmmsg(int, struct mmsghdr*, unsigned int, int)   arm,arm64,mips,mips64,x86_64
 
 # sockets for x86. These are done as an "indexed" call to socketcall syscall.
-int           socket:socketcall:1(int, int, int) x86
+int           __socket:socketcall:1(int, int, int) x86
 int           bind:socketcall:2(int, struct sockaddr*, int)  x86
 int           __connect:socketcall:3(int, struct sockaddr*, socklen_t)   x86
 int           listen:socketcall:4(int, int)                   x86
-int           __accept:socketcall:5(int, struct sockaddr*, socklen_t*)  x86
 int           getsockname:socketcall:6(int, struct sockaddr*, socklen_t*)  x86
 int           getpeername:socketcall:7(int, struct sockaddr*, socklen_t*)  x86
 int           socketpair:socketcall:8(int, int, int, int*)    x86
@@ -266,7 +264,7 @@
 int           getsockopt:socketcall:15(int, int, int, void*, socklen_t*)    x86
 int           sendmsg:socketcall:16(int, const struct msghdr*, unsigned int)  x86
 int           recvmsg:socketcall:17(int, struct msghdr*, unsigned int)   x86
-int           accept4:socketcall:18(int, struct sockaddr*, socklen_t*, int)  x86
+int           __accept4:socketcall:18(int, struct sockaddr*, socklen_t*, int)  x86
 int           recvmmsg:socketcall:19(int, struct mmsghdr*, unsigned int, int, const struct timespec*)   x86
 int           sendmmsg:socketcall:20(int, struct mmsghdr*, unsigned int, int)   x86
 
diff --git a/libc/arch-arm/syscalls/__accept.S b/libc/arch-arm/syscalls/__accept.S
deleted file mode 100644
index bae11bc..0000000
--- a/libc/arch-arm/syscalls/__accept.S
+++ /dev/null
@@ -1,14 +0,0 @@
-/* Generated by gensyscalls.py. Do not edit. */
-
-#include <private/bionic_asm.h>
-
-ENTRY(__accept)
-    mov     ip, r7
-    ldr     r7, =__NR_accept
-    swi     #0
-    mov     r7, ip
-    cmn     r0, #(MAX_ERRNO + 1)
-    bxls    lr
-    neg     r0, r0
-    b       __set_errno
-END(__accept)
diff --git a/libc/arch-arm/syscalls/accept4.S b/libc/arch-arm/syscalls/__accept4.S
similarity index 88%
rename from libc/arch-arm/syscalls/accept4.S
rename to libc/arch-arm/syscalls/__accept4.S
index 6d14e79..9a6874b 100644
--- a/libc/arch-arm/syscalls/accept4.S
+++ b/libc/arch-arm/syscalls/__accept4.S
@@ -2,7 +2,7 @@
 
 #include <private/bionic_asm.h>
 
-ENTRY(accept4)
+ENTRY(__accept4)
     mov     ip, r7
     ldr     r7, =__NR_accept4
     swi     #0
@@ -11,4 +11,4 @@
     bxls    lr
     neg     r0, r0
     b       __set_errno
-END(accept4)
+END(__accept4)
diff --git a/libc/arch-arm/syscalls/socket.S b/libc/arch-arm/syscalls/__socket.S
similarity index 89%
rename from libc/arch-arm/syscalls/socket.S
rename to libc/arch-arm/syscalls/__socket.S
index 05fa529..d63028b 100644
--- a/libc/arch-arm/syscalls/socket.S
+++ b/libc/arch-arm/syscalls/__socket.S
@@ -2,7 +2,7 @@
 
 #include <private/bionic_asm.h>
 
-ENTRY(socket)
+ENTRY(__socket)
     mov     ip, r7
     ldr     r7, =__NR_socket
     swi     #0
@@ -11,4 +11,4 @@
     bxls    lr
     neg     r0, r0
     b       __set_errno
-END(socket)
+END(__socket)
diff --git a/libc/arch-arm64/syscalls/__accept.S b/libc/arch-arm64/syscalls/__accept.S
deleted file mode 100644
index 21b68bc..0000000
--- a/libc/arch-arm64/syscalls/__accept.S
+++ /dev/null
@@ -1,22 +0,0 @@
-/* Generated by gensyscalls.py. Do not edit. */
-
-#include <private/bionic_asm.h>
-
-ENTRY(__accept)
-    stp     x29, x30, [sp, #-16]!
-    mov     x29,  sp
-    str     x8,       [sp, #-16]!
-
-    mov     x8, __NR_accept
-    svc     #0
-
-    ldr     x8,       [sp], #16
-    ldp     x29, x30, [sp], #16
-
-    cmn     x0, #(MAX_ERRNO + 1)
-    cneg    x0, x0, hi
-    b.hi    __set_errno
-
-    ret
-END(__accept)
-.hidden __accept
diff --git a/libc/arch-arm64/syscalls/accept4.S b/libc/arch-arm64/syscalls/__accept4.S
similarity index 88%
rename from libc/arch-arm64/syscalls/accept4.S
rename to libc/arch-arm64/syscalls/__accept4.S
index 3c9227f..c66cd2e 100644
--- a/libc/arch-arm64/syscalls/accept4.S
+++ b/libc/arch-arm64/syscalls/__accept4.S
@@ -2,7 +2,7 @@
 
 #include <private/bionic_asm.h>
 
-ENTRY(accept4)
+ENTRY(__accept4)
     stp     x29, x30, [sp, #-16]!
     mov     x29,  sp
     str     x8,       [sp, #-16]!
@@ -18,4 +18,5 @@
     b.hi    __set_errno
 
     ret
-END(accept4)
+END(__accept4)
+.hidden __accept4
diff --git a/libc/arch-arm64/syscalls/socket.S b/libc/arch-arm64/syscalls/__socket.S
similarity index 88%
rename from libc/arch-arm64/syscalls/socket.S
rename to libc/arch-arm64/syscalls/__socket.S
index 37a3851..aa9da22 100644
--- a/libc/arch-arm64/syscalls/socket.S
+++ b/libc/arch-arm64/syscalls/__socket.S
@@ -2,7 +2,7 @@
 
 #include <private/bionic_asm.h>
 
-ENTRY(socket)
+ENTRY(__socket)
     stp     x29, x30, [sp, #-16]!
     mov     x29,  sp
     str     x8,       [sp, #-16]!
@@ -18,4 +18,5 @@
     b.hi    __set_errno
 
     ret
-END(socket)
+END(__socket)
+.hidden __socket
diff --git a/libc/arch-mips/syscalls/__accept.S b/libc/arch-mips/syscalls/__accept.S
deleted file mode 100644
index d8141fe..0000000
--- a/libc/arch-mips/syscalls/__accept.S
+++ /dev/null
@@ -1,19 +0,0 @@
-/* Generated by gensyscalls.py. Do not edit. */
-
-#include <private/bionic_asm.h>
-
-ENTRY(__accept)
-    .set noreorder
-    .cpload t9
-    li v0, __NR_accept
-    syscall
-    bnez a3, 1f
-    move a0, v0
-    j ra
-    nop
-1:
-    la t9,__set_errno
-    j t9
-    nop
-    .set reorder
-END(__accept)
diff --git a/libc/arch-mips/syscalls/accept4.S b/libc/arch-mips/syscalls/__accept4.S
similarity index 89%
rename from libc/arch-mips/syscalls/accept4.S
rename to libc/arch-mips/syscalls/__accept4.S
index ea1dc60..8634a35 100644
--- a/libc/arch-mips/syscalls/accept4.S
+++ b/libc/arch-mips/syscalls/__accept4.S
@@ -2,7 +2,7 @@
 
 #include <private/bionic_asm.h>
 
-ENTRY(accept4)
+ENTRY(__accept4)
     .set noreorder
     .cpload t9
     li v0, __NR_accept4
@@ -16,4 +16,4 @@
     j t9
     nop
     .set reorder
-END(accept4)
+END(__accept4)
diff --git a/libc/arch-mips/syscalls/socket.S b/libc/arch-mips/syscalls/__socket.S
similarity index 89%
rename from libc/arch-mips/syscalls/socket.S
rename to libc/arch-mips/syscalls/__socket.S
index 2056bcd..6508911 100644
--- a/libc/arch-mips/syscalls/socket.S
+++ b/libc/arch-mips/syscalls/__socket.S
@@ -2,7 +2,7 @@
 
 #include <private/bionic_asm.h>
 
-ENTRY(socket)
+ENTRY(__socket)
     .set noreorder
     .cpload t9
     li v0, __NR_socket
@@ -16,4 +16,4 @@
     j t9
     nop
     .set reorder
-END(socket)
+END(__socket)
diff --git a/libc/arch-mips64/syscalls/__accept.S b/libc/arch-mips64/syscalls/__accept.S
deleted file mode 100644
index 4404a68..0000000
--- a/libc/arch-mips64/syscalls/__accept.S
+++ /dev/null
@@ -1,26 +0,0 @@
-/* Generated by gensyscalls.py. Do not edit. */
-
-#include <private/bionic_asm.h>
-
-ENTRY(__accept)
-    .set push
-    .set noreorder
-    li v0, __NR_accept
-    syscall
-    bnez a3, 1f
-    move a0, v0
-    j ra
-    nop
-1:
-    move t0, ra
-    bal     2f
-    nop
-2:
-    .cpsetup ra, t1, 2b
-    LA t9,__set_errno
-    .cpreturn
-    j t9
-    move ra, t0
-    .set pop
-END(__accept)
-.hidden __accept
diff --git a/libc/arch-mips64/syscalls/accept4.S b/libc/arch-mips64/syscalls/__accept4.S
similarity index 87%
rename from libc/arch-mips64/syscalls/accept4.S
rename to libc/arch-mips64/syscalls/__accept4.S
index 8b5cadb..e68bdb6 100644
--- a/libc/arch-mips64/syscalls/accept4.S
+++ b/libc/arch-mips64/syscalls/__accept4.S
@@ -2,7 +2,7 @@
 
 #include <private/bionic_asm.h>
 
-ENTRY(accept4)
+ENTRY(__accept4)
     .set push
     .set noreorder
     li v0, __NR_accept4
@@ -22,4 +22,5 @@
     j t9
     move ra, t0
     .set pop
-END(accept4)
+END(__accept4)
+.hidden __accept4
diff --git a/libc/arch-mips64/syscalls/socket.S b/libc/arch-mips64/syscalls/__socket.S
similarity index 87%
rename from libc/arch-mips64/syscalls/socket.S
rename to libc/arch-mips64/syscalls/__socket.S
index 2020e2e..d1e0058 100644
--- a/libc/arch-mips64/syscalls/socket.S
+++ b/libc/arch-mips64/syscalls/__socket.S
@@ -2,7 +2,7 @@
 
 #include <private/bionic_asm.h>
 
-ENTRY(socket)
+ENTRY(__socket)
     .set push
     .set noreorder
     li v0, __NR_socket
@@ -22,4 +22,5 @@
     j t9
     move ra, t0
     .set pop
-END(socket)
+END(__socket)
+.hidden __socket
diff --git a/libc/arch-x86/syscalls/__accept.S b/libc/arch-x86/syscalls/__accept.S
deleted file mode 100644
index 31cb350..0000000
--- a/libc/arch-x86/syscalls/__accept.S
+++ /dev/null
@@ -1,27 +0,0 @@
-/* Generated by gensyscalls.py. Do not edit. */
-
-#include <private/bionic_asm.h>
-
-ENTRY(__accept)
-    pushl   %ebx
-    pushl   %ecx
-    .cfi_def_cfa_offset 8
-    .cfi_rel_offset ebx, 0
-    .cfi_rel_offset ecx, 4
-    mov     $5, %ebx
-    mov     %esp, %ecx
-    addl    $12, %ecx
-    movl    $__NR_socketcall, %eax
-    int     $0x80
-    cmpl    $-MAX_ERRNO, %eax
-    jb      1f
-    negl    %eax
-    pushl   %eax
-    call    __set_errno
-    addl    $4, %esp
-    orl     $-1, %eax
-1:
-    popl    %ecx
-    popl    %ebx
-    ret
-END(__accept)
diff --git a/libc/arch-x86/syscalls/accept4.S b/libc/arch-x86/syscalls/__accept4.S
similarity index 94%
rename from libc/arch-x86/syscalls/accept4.S
rename to libc/arch-x86/syscalls/__accept4.S
index dc3c1f5..573eddb 100644
--- a/libc/arch-x86/syscalls/accept4.S
+++ b/libc/arch-x86/syscalls/__accept4.S
@@ -2,7 +2,7 @@
 
 #include <private/bionic_asm.h>
 
-ENTRY(accept4)
+ENTRY(__accept4)
     pushl   %ebx
     pushl   %ecx
     .cfi_def_cfa_offset 8
@@ -24,4 +24,4 @@
     popl    %ecx
     popl    %ebx
     ret
-END(accept4)
+END(__accept4)
diff --git a/libc/arch-x86/syscalls/socket.S b/libc/arch-x86/syscalls/__socket.S
similarity index 94%
rename from libc/arch-x86/syscalls/socket.S
rename to libc/arch-x86/syscalls/__socket.S
index 282681e..5e52d8f 100644
--- a/libc/arch-x86/syscalls/socket.S
+++ b/libc/arch-x86/syscalls/__socket.S
@@ -2,7 +2,7 @@
 
 #include <private/bionic_asm.h>
 
-ENTRY(socket)
+ENTRY(__socket)
     pushl   %ebx
     pushl   %ecx
     .cfi_def_cfa_offset 8
@@ -24,4 +24,4 @@
     popl    %ecx
     popl    %ebx
     ret
-END(socket)
+END(__socket)
diff --git a/libc/arch-x86_64/syscalls/__accept.S b/libc/arch-x86_64/syscalls/__accept.S
deleted file mode 100644
index ff0f5e7..0000000
--- a/libc/arch-x86_64/syscalls/__accept.S
+++ /dev/null
@@ -1,17 +0,0 @@
-/* Generated by gensyscalls.py. Do not edit. */
-
-#include <private/bionic_asm.h>
-
-ENTRY(__accept)
-    movl    $__NR_accept, %eax
-    syscall
-    cmpq    $-MAX_ERRNO, %rax
-    jb      1f
-    negl    %eax
-    movl    %eax, %edi
-    call    __set_errno
-    orq     $-1, %rax
-1:
-    ret
-END(__accept)
-.hidden __accept
diff --git a/libc/arch-x86_64/syscalls/accept4.S b/libc/arch-x86_64/syscalls/__accept4.S
similarity index 85%
rename from libc/arch-x86_64/syscalls/accept4.S
rename to libc/arch-x86_64/syscalls/__accept4.S
index d66d952..cf4837f 100644
--- a/libc/arch-x86_64/syscalls/accept4.S
+++ b/libc/arch-x86_64/syscalls/__accept4.S
@@ -2,7 +2,7 @@
 
 #include <private/bionic_asm.h>
 
-ENTRY(accept4)
+ENTRY(__accept4)
     movq    %rcx, %r10
     movl    $__NR_accept4, %eax
     syscall
@@ -14,4 +14,5 @@
     orq     $-1, %rax
 1:
     ret
-END(accept4)
+END(__accept4)
+.hidden __accept4
diff --git a/libc/arch-x86_64/syscalls/socket.S b/libc/arch-x86_64/syscalls/__socket.S
similarity index 85%
rename from libc/arch-x86_64/syscalls/socket.S
rename to libc/arch-x86_64/syscalls/__socket.S
index 9665ee4..67621fc 100644
--- a/libc/arch-x86_64/syscalls/socket.S
+++ b/libc/arch-x86_64/syscalls/__socket.S
@@ -2,7 +2,7 @@
 
 #include <private/bionic_asm.h>
 
-ENTRY(socket)
+ENTRY(__socket)
     movl    $__NR_socket, %eax
     syscall
     cmpq    $-MAX_ERRNO, %rax
@@ -13,4 +13,5 @@
     orq     $-1, %rax
 1:
     ret
-END(socket)
+END(__socket)
+.hidden __socket
diff --git a/libc/bionic/NetdClient.cpp b/libc/bionic/NetdClient.cpp
index 72d90b7..5b0f4fd 100644
--- a/libc/bionic/NetdClient.cpp
+++ b/libc/bionic/NetdClient.cpp
@@ -18,11 +18,11 @@
 #error NetdClient.cpp should NOT be included in static libc builds.
 #endif
 
-#include <private/NetdClient.h>
-#include <private/libc_logging.h>
-#include <pthread.h>
+#include "private/libc_logging.h"
+#include "private/NetdClientDispatch.h"
 
 #include <dlfcn.h>
+#include <pthread.h>
 
 template <typename FunctionType>
 static void netdClientInitFunction(void* handle, const char* symbol, FunctionType* function) {
@@ -40,16 +40,19 @@
         // default implementations of functions that it would've overridden.
         return;
     }
-    netdClientInitFunction(netdClientHandle, "netdClientInitAccept", &__netdClientDispatch.accept);
+    netdClientInitFunction(netdClientHandle, "netdClientInitAccept4",
+                           &__netdClientDispatch.accept4);
     netdClientInitFunction(netdClientHandle, "netdClientInitConnect",
                            &__netdClientDispatch.connect);
+    netdClientInitFunction(netdClientHandle, "netdClientInitNetIdForResolv",
+                           &__netdClientDispatch.netIdForResolv);
+    netdClientInitFunction(netdClientHandle, "netdClientInitSocket", &__netdClientDispatch.socket);
 }
 
 static pthread_once_t netdClientInitOnce = PTHREAD_ONCE_INIT;
 
 extern "C" __LIBC_HIDDEN__ void netdClientInit() {
     if (pthread_once(&netdClientInitOnce, netdClientInitImpl)) {
-        __libc_format_log(ANDROID_LOG_ERROR, "netdClient",
-                          "Unable to initialize netd_client component.");
+        __libc_format_log(ANDROID_LOG_ERROR, "netdClient", "Failed to initialize netd_client");
     }
 }
diff --git a/libc/bionic/NetdClientDispatch.cpp b/libc/bionic/NetdClientDispatch.cpp
index adfe16d..67fa197 100644
--- a/libc/bionic/NetdClientDispatch.cpp
+++ b/libc/bionic/NetdClientDispatch.cpp
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-#include <private/NetdClient.h>
+#include "private/NetdClientDispatch.h"
 
 #ifdef __i386__
 #define __socketcall __attribute__((__cdecl__))
@@ -22,10 +22,19 @@
 #define __socketcall
 #endif
 
-extern "C" __socketcall int __accept(int, sockaddr*, socklen_t*);
+extern "C" __socketcall int __accept4(int, sockaddr*, socklen_t*, int);
 extern "C" __socketcall int __connect(int, const sockaddr*, socklen_t);
+extern "C" __socketcall int __socket(int, int, int);
 
-NetdClientDispatch __netdClientDispatch __attribute__((aligned(32))) = {
-    __accept,
+static unsigned fallBackNetIdForResolv(unsigned netId) {
+    return netId;
+}
+
+// This structure is modified only at startup (when libc.so is loaded) and never
+// afterwards, so it's okay that it's read later at runtime without a lock.
+__LIBC_HIDDEN__ NetdClientDispatch __netdClientDispatch __attribute__((aligned(32))) = {
+    __accept4,
     __connect,
+    __socket,
+    fallBackNetIdForResolv,
 };
diff --git a/libc/bionic/accept.cpp b/libc/bionic/accept.cpp
index 46b4efc..7f7aa06 100644
--- a/libc/bionic/accept.cpp
+++ b/libc/bionic/accept.cpp
@@ -14,9 +14,8 @@
  * limitations under the License.
  */
 
-#include <private/NetdClient.h>
 #include <sys/socket.h>
 
 int accept(int sockfd, sockaddr* addr, socklen_t* addrlen) {
-    return __netdClientDispatch.accept(sockfd, addr, addrlen);
+    return accept4(sockfd, addr, addrlen, 0);
 }
diff --git a/libc/private/NetdClient.h b/libc/bionic/accept4.cpp
similarity index 69%
rename from libc/private/NetdClient.h
rename to libc/bionic/accept4.cpp
index b2ce7a6..9f58dc1 100644
--- a/libc/private/NetdClient.h
+++ b/libc/bionic/accept4.cpp
@@ -14,16 +14,10 @@
  * limitations under the License.
  */
 
-#ifndef PRIVATE_NETD_CLIENT_H
-#define PRIVATE_NETD_CLIENT_H
+#include "private/NetdClientDispatch.h"
 
 #include <sys/socket.h>
 
-struct NetdClientDispatch {
-    int (*accept)(int, sockaddr*, socklen_t*);
-    int (*connect)(int, const sockaddr*, socklen_t);
-};
-
-extern NetdClientDispatch __netdClientDispatch;
-
-#endif  // PRIVATE_NETD_CLIENT_H
+int accept4(int sockfd, sockaddr* addr, socklen_t* addrlen, int flags) {
+    return __netdClientDispatch.accept4(sockfd, addr, addrlen, flags);
+}
diff --git a/libc/bionic/connect.cpp b/libc/bionic/connect.cpp
index c5db46b..1673f4a 100644
--- a/libc/bionic/connect.cpp
+++ b/libc/bionic/connect.cpp
@@ -14,7 +14,8 @@
  * limitations under the License.
  */
 
-#include <private/NetdClient.h>
+#include "private/NetdClientDispatch.h"
+
 #include <sys/socket.h>
 
 int connect(int sockfd, const sockaddr* addr, socklen_t addrlen) {
diff --git a/libc/private/NetdClient.h b/libc/bionic/socket.cpp
similarity index 69%
copy from libc/private/NetdClient.h
copy to libc/bionic/socket.cpp
index b2ce7a6..2f9e145 100644
--- a/libc/private/NetdClient.h
+++ b/libc/bionic/socket.cpp
@@ -14,16 +14,10 @@
  * limitations under the License.
  */
 
-#ifndef PRIVATE_NETD_CLIENT_H
-#define PRIVATE_NETD_CLIENT_H
+#include "private/NetdClientDispatch.h"
 
 #include <sys/socket.h>
 
-struct NetdClientDispatch {
-    int (*accept)(int, sockaddr*, socklen_t*);
-    int (*connect)(int, const sockaddr*, socklen_t);
-};
-
-extern NetdClientDispatch __netdClientDispatch;
-
-#endif  // PRIVATE_NETD_CLIENT_H
+int socket(int domain, int type, int protocol) {
+    return __netdClientDispatch.socket(domain, type, protocol);
+}
diff --git a/libc/dns/gethnamaddr.c b/libc/dns/gethnamaddr.c
index 4da99b2..1afad6d 100644
--- a/libc/dns/gethnamaddr.c
+++ b/libc/dns/gethnamaddr.c
@@ -60,6 +60,7 @@
 #include <netinet/in.h>
 #include <arpa/inet.h>
 #include <arpa/nameser.h>
+#include "NetdClientDispatch.h"
 #include "resolv_netid.h"
 #include "resolv_private.h"
 #include "resolv_cache.h"
@@ -760,6 +761,8 @@
 	proxy = android_open_proxy();
 	if (proxy == NULL) goto exit;
 
+	netid = __netdClientDispatch.netIdForResolv(netid);
+
 	/* This is writing to system/netd/DnsProxyListener.cpp and changes
 	 * here need to be matched there */
 	if (fprintf(proxy, "gethostbyname %u %s %d",
@@ -796,6 +799,8 @@
 	const char * addrStr = inet_ntop(af, addr, buf, sizeof(buf));
 	if (addrStr == NULL) goto exit;
 
+	netid = __netdClientDispatch.netIdForResolv(netid);
+
 	if (fprintf(proxy, "gethostbyaddr %s %d %d %u",
 			addrStr, len, af, netid) < 0) {
 		goto exit;
diff --git a/libc/dns/net/getaddrinfo.c b/libc/dns/net/getaddrinfo.c
index 4c120d9..be692e3 100644
--- a/libc/dns/net/getaddrinfo.c
+++ b/libc/dns/net/getaddrinfo.c
@@ -92,6 +92,7 @@
 #include <ctype.h>
 #include <errno.h>
 #include <netdb.h>
+#include "NetdClientDispatch.h"
 #include "resolv_cache.h"
 #include "resolv_netid.h"
 #include "resolv_private.h"
@@ -449,6 +450,8 @@
 		return EAI_NODATA;
 	}
 
+	netid = __netdClientDispatch.netIdForResolv(netid);
+
 	// Send the request.
 	proxy = fdopen(sock, "r+");
 	if (fprintf(proxy, "getaddrinfo %s %s %d %d %d %d %u",
diff --git a/libc/private/NetdClient.h b/libc/private/NetdClientDispatch.h
similarity index 60%
copy from libc/private/NetdClient.h
copy to libc/private/NetdClientDispatch.h
index b2ce7a6..8d8947d 100644
--- a/libc/private/NetdClient.h
+++ b/libc/private/NetdClientDispatch.h
@@ -14,16 +14,23 @@
  * limitations under the License.
  */
 
-#ifndef PRIVATE_NETD_CLIENT_H
-#define PRIVATE_NETD_CLIENT_H
+#ifndef PRIVATE_NETD_CLIENT_DISPATCH_H
+#define PRIVATE_NETD_CLIENT_DISPATCH_H
 
+#include <sys/cdefs.h>
 #include <sys/socket.h>
 
+__BEGIN_DECLS
+
 struct NetdClientDispatch {
-    int (*accept)(int, sockaddr*, socklen_t*);
-    int (*connect)(int, const sockaddr*, socklen_t);
+    int (*accept4)(int, struct sockaddr*, socklen_t*, int);
+    int (*connect)(int, const struct sockaddr*, socklen_t);
+    int (*socket)(int, int, int);
+    unsigned (*netIdForResolv)(unsigned);
 };
 
-extern NetdClientDispatch __netdClientDispatch;
+extern __LIBC_HIDDEN__ struct NetdClientDispatch __netdClientDispatch;
 
-#endif  // PRIVATE_NETD_CLIENT_H
+__END_DECLS
+
+#endif  // PRIVATE_NETD_CLIENT_DISPATCH_H
diff --git a/libc/upstream-netbsd/lib/libc/inet/inet_ntop.c b/libc/upstream-netbsd/lib/libc/inet/inet_ntop.c
deleted file mode 100644
index d27a5b1..0000000
--- a/libc/upstream-netbsd/lib/libc/inet/inet_ntop.c
+++ /dev/null
@@ -1,231 +0,0 @@
-/*	$NetBSD: inet_ntop.c,v 1.11 2014/02/10 16:30:54 christos Exp $	*/
-
-/*
- * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
- * Copyright (c) 1996-1999 by Internet Software Consortium.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
- * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include <sys/cdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-#if 0
-static const char rcsid[] = "Id: inet_ntop.c,v 1.5 2005/11/03 22:59:52 marka Exp";
-#else
-__RCSID("$NetBSD: inet_ntop.c,v 1.11 2014/02/10 16:30:54 christos Exp $");
-#endif
-#endif /* LIBC_SCCS and not lint */
-
-#include "port_before.h"
-
-#include "namespace.h"
-#include <sys/param.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <arpa/nameser.h>
-
-#include <assert.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "port_after.h"
-
-#ifdef __weak_alias
-__weak_alias(inet_ntop,_inet_ntop)
-#endif
-
-/*%
- * WARNING: Don't even consider trying to compile this on a system where
- * sizeof(int) < 4.  sizeof(int) > 4 is fine; all the world's not a VAX.
- */
-
-static const char *inet_ntop4(const u_char *src, char *dst, socklen_t size);
-static const char *inet_ntop6(const u_char *src, char *dst, socklen_t size);
-
-/* char *
- * inet_ntop(af, src, dst, size)
- *	convert a network format address to presentation format.
- * return:
- *	pointer to presentation format address (`dst'), or NULL (see errno).
- * author:
- *	Paul Vixie, 1996.
- */
-const char *
-inet_ntop(int af, const void *src, char *dst, socklen_t size)
-{
-
-	_DIAGASSERT(src != NULL);
-	_DIAGASSERT(dst != NULL);
-
-	switch (af) {
-	case AF_INET:
-		return inet_ntop4(src, dst, size);
-	case AF_INET6:
-		return inet_ntop6(src, dst, size);
-	default:
-		errno = EAFNOSUPPORT;
-		return NULL;
-	}
-	/* NOTREACHED */
-}
-
-/* const char *
- * inet_ntop4(src, dst, size)
- *	format an IPv4 address, more or less like inet_ntoa()
- * return:
- *	`dst' (as a const)
- * notes:
- *	(1) uses no statics
- *	(2) takes a u_char* not an in_addr as input
- * author:
- *	Paul Vixie, 1996.
- */
-static const char *
-inet_ntop4(const u_char *src, char *dst, socklen_t size)
-{
-	char tmp[sizeof "255.255.255.255"];
-	int l;
-
-	_DIAGASSERT(src != NULL);
-	_DIAGASSERT(dst != NULL);
-
-	l = snprintf(tmp, sizeof(tmp), "%u.%u.%u.%u",
-	    src[0], src[1], src[2], src[3]);
-	if (l <= 0 || (socklen_t) l >= size)
-		return NULL;
-	strlcpy(dst, tmp, size);
-	return dst;
-}
-
-/* const char *
- * inet_ntop6(src, dst, size)
- *	convert IPv6 binary address into presentation (printable) format
- * author:
- *	Paul Vixie, 1996.
- */
-static const char *
-inet_ntop6(const u_char *src, char *dst, socklen_t size)
-{
-	/*
-	 * Note that int32_t and int16_t need only be "at least" large enough
-	 * to contain a value of the specified size.  On some systems, like
-	 * Crays, there is no such thing as an integer variable with 16 bits.
-	 * Keep this in mind if you think this function should have been coded
-	 * to use pointer overlays.  All the world's not a VAX.
-	 */
-	char tmp[sizeof "ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255"];
-	char *tp, *ep;
-	struct { int base, len; } best, cur;
-	u_int words[NS_IN6ADDRSZ / NS_INT16SZ];
-	int i;
-	int advance;
-
-	_DIAGASSERT(src != NULL);
-	_DIAGASSERT(dst != NULL);
-
-	/*
-	 * Preprocess:
-	 *	Copy the input (bytewise) array into a wordwise array.
-	 *	Find the longest run of 0x00's in src[] for :: shorthanding.
-	 */
-	memset(words, '\0', sizeof words);
-	for (i = 0; i < NS_IN6ADDRSZ; i++)
-		words[i / 2] |= (src[i] << ((1 - (i % 2)) << 3));
-	best.base = -1;
-	best.len = 0;
-	cur.base = -1;
-	cur.len = 0;
-	for (i = 0; i < (NS_IN6ADDRSZ / NS_INT16SZ); i++) {
-		if (words[i] == 0) {
-			if (cur.base == -1)
-				cur.base = i, cur.len = 1;
-			else
-				cur.len++;
-		} else {
-			if (cur.base != -1) {
-				if (best.base == -1 || cur.len > best.len)
-					best = cur;
-				cur.base = -1;
-			}
-		}
-	}
-	if (cur.base != -1) {
-		if (best.base == -1 || cur.len > best.len)
-			best = cur;
-	}
-	if (best.base != -1 && best.len < 2)
-		best.base = -1;
-
-	/*
-	 * Format the result.
-	 */
-	tp = tmp;
-	ep = tmp + sizeof(tmp);
-	for (i = 0; i < (NS_IN6ADDRSZ / NS_INT16SZ); i++) {
-		/* Are we inside the best run of 0x00's? */
-		if (best.base != -1 && i >= best.base &&
-		    i < (best.base + best.len)) {
-			if (i == best.base)
-				*tp++ = ':';
-			continue;
-		}
-		/* Are we following an initial run of 0x00s or any real hex? */
-		if (i != 0) {
-			if (tp + 1 >= ep)
-				goto out;
-			*tp++ = ':';
-		}
-		/* Is this address an encapsulated IPv4? */
-		if (i == 6 && best.base == 0 &&
-		    (best.len == 6 ||
-		    (best.len == 7 && words[7] != 0x0001) ||
-		    (best.len == 5 && words[5] == 0xffff))) {
-			if (!inet_ntop4(src + 12, tp, (socklen_t)(ep - tp)))
-				goto out;
-			tp += strlen(tp);
-			break;
-		}
-		advance = snprintf(tp, (size_t)(ep - tp), "%x", words[i]);
-		if (advance <= 0 || advance >= ep - tp)
-			goto out;
-		tp += advance;
-	}
-	/* Was it a trailing run of 0x00's? */
-	if (best.base != -1 && (best.base + best.len) == 
-	    (NS_IN6ADDRSZ / NS_INT16SZ)) {
-		if (tp + 1 >= ep)
-			goto out;
-		*tp++ = ':';
-	}
-	if (tp + 1 >= ep)
-		goto out;
-	*tp++ = '\0';
-
-	/*
-	 * Check for overflow, copy, and we're done.
-	 */
-	if ((size_t)(tp - tmp) > size)
-		goto out;
-	strlcpy(dst, tmp, size);
-	return dst;
-out:
-	errno = ENOSPC;
-	return NULL;
-}
-
-/*! \file */
diff --git a/libc/upstream-openbsd/lib/libc/net/inet_ntop.c b/libc/upstream-openbsd/lib/libc/net/inet_ntop.c
index 359acd8..f991a07 100644
--- a/libc/upstream-openbsd/lib/libc/net/inet_ntop.c
+++ b/libc/upstream-openbsd/lib/libc/net/inet_ntop.c
@@ -1,4 +1,4 @@
-/*	$OpenBSD: inet_ntop.c,v 1.9 2014/02/05 14:20:43 millert Exp $	*/
+/*	$OpenBSD: inet_ntop.c,v 1.10 2014/05/17 18:16:14 tedu Exp $	*/
 
 /* Copyright (c) 1996 by Internet Software Consortium.
  *
@@ -71,11 +71,11 @@
 static const char *
 inet_ntop4(const u_char *src, char *dst, size_t size)
 {
-	static const char fmt[] = "%u.%u.%u.%u";
 	char tmp[sizeof "255.255.255.255"];
 	int l;
 
-	l = snprintf(tmp, size, fmt, src[0], src[1], src[2], src[3]);
+	l = snprintf(tmp, sizeof(tmp), "%u.%u.%u.%u",
+	    src[0], src[1], src[2], src[3]);
 	if (l <= 0 || l >= size) {
 		errno = ENOSPC;
 		return (NULL);
diff --git a/tests/wchar_test.cpp b/tests/wchar_test.cpp
index c8aec2d..50b8608 100644
--- a/tests/wchar_test.cpp
+++ b/tests/wchar_test.cpp
@@ -306,19 +306,19 @@
   // 2-byte UTF-8.
   ASSERT_EQ(static_cast<size_t>(-2), mbrtowc(&out, "\xc2", 1, ps));
   ASSERT_EQ(1U, mbrtowc(&out, "\xa2" "cdef", 5, ps));
-  ASSERT_EQ(0x00a2, out);
+  ASSERT_EQ(static_cast<wchar_t>(0x00a2), out);
   ASSERT_TRUE(mbsinit(ps));
   // 3-byte UTF-8.
   ASSERT_EQ(static_cast<size_t>(-2), mbrtowc(&out, "\xe2", 1, ps));
   ASSERT_EQ(static_cast<size_t>(-2), mbrtowc(&out, "\x82", 1, ps));
   ASSERT_EQ(1U, mbrtowc(&out, "\xac" "def", 4, ps));
-  ASSERT_EQ(0x20ac, out);
+  ASSERT_EQ(static_cast<wchar_t>(0x20ac), out);
   ASSERT_TRUE(mbsinit(ps));
   // 4-byte UTF-8.
   ASSERT_EQ(static_cast<size_t>(-2), mbrtowc(&out, "\xf0", 1, ps));
   ASSERT_EQ(static_cast<size_t>(-2), mbrtowc(&out, "\xa4\xad", 2, ps));
   ASSERT_EQ(1U, mbrtowc(&out, "\xa2" "ef", 3, ps));
-  ASSERT_EQ(0x24b62, out);
+  ASSERT_EQ(static_cast<wchar_t>(0x24b62), out);
   ASSERT_TRUE(mbsinit(ps));
 
   // Invalid 2-byte
@@ -341,9 +341,9 @@
   const char* valid = "A" "\xc2\xa2" "\xe2\x82\xac" "\xf0\xa4\xad\xa2" "ef";
   ASSERT_EQ(4U, mbsrtowcs(out, &valid, 4, ps));
   ASSERT_EQ(L'A', out[0]);
-  ASSERT_EQ(0x00a2, out[1]);
-  ASSERT_EQ(0x20ac, out[2]);
-  ASSERT_EQ(0x24b62, out[3]);
+  ASSERT_EQ(static_cast<wchar_t>(0x00a2), out[1]);
+  ASSERT_EQ(static_cast<wchar_t>(0x20ac), out[2]);
+  ASSERT_EQ(static_cast<wchar_t>(0x24b62), out[3]);
   ASSERT_EQ('e', *valid);
 
   const char* invalid = "A" "\xc2\x20" "ef";
