Query libnetd_client for the appropriate netId for host resolution.

If libnetd_client can't be found, operate as before and use the default netId
potentially overriden by a more specific netId passed in to
android_get*fornet().

(cherry picked from commit 559c7842cc6862568d9b5799fc0bcf74d58b596b)

Change-Id: I42ef3293172651870fb46d2de22464c4f03e8e0b
diff --git a/libc/bionic/NetdClient.cpp b/libc/bionic/NetdClient.cpp
index 75e84ee..36796a2 100644
--- a/libc/bionic/NetdClient.cpp
+++ b/libc/bionic/NetdClient.cpp
@@ -43,6 +43,8 @@
     netdClientInitFunction(netdClientHandle, "netdClientInitAccept", &__netdClientDispatch.accept);
     netdClientInitFunction(netdClientHandle, "netdClientInitConnect",
                            &__netdClientDispatch.connect);
+    netdClientInitFunction(netdClientHandle, "netdClientInitNetIdForResolv",
+                           &__netdClientDispatch.netIdForResolv);
 }
 
 static pthread_once_t netdClientInitOnce = PTHREAD_ONCE_INIT;
diff --git a/libc/bionic/NetdClientDispatch.cpp b/libc/bionic/NetdClientDispatch.cpp
index 6bd2357..17bbd9d 100644
--- a/libc/bionic/NetdClientDispatch.cpp
+++ b/libc/bionic/NetdClientDispatch.cpp
@@ -25,9 +25,14 @@
 extern "C" __socketcall int __accept(int, sockaddr*, socklen_t*);
 extern "C" __socketcall int __connect(int, const sockaddr*, socklen_t);
 
+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))) = {
     __accept,
     __connect,
+    fallBackNetIdForResolv,
 };