qemu-sockets-android.c: Add support for socket=<number> option.

Change-Id: If7896d653b36fde05c24d3170ff5b0beb27fff5f
diff --git a/qemu-sockets.c b/qemu-sockets.c
index c526324..c4c0f65 100644
--- a/qemu-sockets.c
+++ b/qemu-sockets.c
@@ -52,6 +52,11 @@
         },{
             .name = "ipv6",
             .type = QEMU_OPT_BOOL,
+#ifdef CONFIG_ANDROID
+        },{
+            .name = "socket",
+            .type = QEMU_OPT_NUMBER,
+#endif
         },
         { /* end if list */ }
     },
@@ -130,6 +135,13 @@
     ai.ai_family = PF_UNSPEC;
     ai.ai_socktype = SOCK_STREAM;
 
+#ifdef CONFIG_ANDROID
+    const char* socket_fd = qemu_opt_get(opts, "socket");
+    if (socket_fd) {
+        return atoi(socket_fd);
+    }
+#endif
+
     if ((qemu_opt_get(opts, "host") == NULL) ||
         (qemu_opt_get(opts, "port") == NULL)) {
         fprintf(stderr, "%s: host and/or port not specified\n", __FUNCTION__);
@@ -226,6 +238,13 @@
     char uport[33];
     int sock,rc;
 
+#ifdef CONFIG_ANDROID
+    const char* socket_fd = qemu_opt_get(opts, "socket");
+    if (socket_fd) {
+        return atoi(socket_fd);
+    }
+#endif
+
     memset(&ai,0, sizeof(ai));
     ai.ai_flags = AI_CANONNAME | AI_ADDRCONFIG;
     ai.ai_family = PF_UNSPEC;
@@ -454,6 +473,25 @@
         qemu_opt_set(opts, "ipv4", "on");
     if (strstr(optstr, ",ipv6"))
         qemu_opt_set(opts, "ipv6", "on");
+#ifdef CONFIG_ANDROID
+    h = strstr(optstr, ",socket=");
+    if (h) {
+        int socket_fd;
+        char str_fd[12];
+        if (1 != sscanf(h+7,"%d",&socket_fd)) {
+            fprintf(stderr,"%s: socket fd parse error (%s)\n",
+                    __FUNCTION__, h+7);
+            return -1;
+        }
+        if (socket_fd < 0 || socket_fd >= INT_MAX) {
+            fprintf(stderr,"%s: socket fd range error (%d)\n",
+                    __FUNCTION__, socket_fd);
+            return -1;
+        }
+        snprintf(str_fd, sizeof str_fd, "%d", socket_fd);
+        qemu_opt_set(opts, "socket", str_fd);
+    }
+#endif
     return 0;
 }