Add getNetworkForSocket().

This doesn't require a roundtrip to netd, since anybody can read the SO_MARK.

Change-Id: I51dd17725c4534cb0d5dbc8e93e844e6a7847959
diff --git a/client/NetdClient.cpp b/client/NetdClient.cpp
index 8a54354..7380224 100644
--- a/client/NetdClient.cpp
+++ b/client/NetdClient.cpp
@@ -16,6 +16,7 @@
 
 #include "NetdClient.h"
 
+#include "Fwmark.h"
 #include "FwmarkClient.h"
 #include "FwmarkCommand.h"
 #include "resolv_netid.h"
@@ -163,6 +164,19 @@
     }
 }
 
+extern "C" int getNetworkForSocket(unsigned* netId, int socketFd) {
+    if (!netId || socketFd < 0) {
+        return EBADF;
+    }
+    Fwmark fwmark;
+    socklen_t fwmarkLen = sizeof(fwmark.intValue);
+    if (getsockopt(socketFd, SOL_SOCKET, SO_MARK, &fwmark.intValue, &fwmarkLen) == -1) {
+        return errno;
+    }
+    *netId = fwmark.netId;
+    return 0;
+}
+
 extern "C" unsigned getNetworkForProcess() {
     return netIdForProcess;
 }