[Util] function to get port number
authorJaeyun <jy1210.jung@samsung.com>
Fri, 15 Jul 2022 10:17:39 +0000 (19:17 +0900)
committerjaeyun-jung <39614140+jaeyun-jung@users.noreply.github.com>
Mon, 18 Jul 2022 02:35:02 +0000 (11:35 +0900)
Add util function to get available port.

TODO: update testcase (data transfer with fixed port) later.
Signed-off-by: Jaeyun <jy1210.jung@samsung.com>
src/libnnstreamer-edge/nnstreamer-edge-common.c
src/libnnstreamer-edge/nnstreamer-edge-common.h
src/libnnstreamer-edge/nnstreamer-edge-internal.c
src/libnnstreamer-edge/nnstreamer-edge-internal.h

index a58a6bd921506d5ac1f2f6a498194525afef3b8d..217571dd169406f6498b6ed7af091e4987493f0f 100644 (file)
 
 #include "nnstreamer-edge-common.h"
 
+/**
+ * @brief Internal util function to get available port number.
+ */
+int
+nns_edge_get_available_port (void)
+{
+  struct sockaddr_in sin;
+  int port = 0, sock;
+  socklen_t len = sizeof (struct sockaddr);
+
+  sin.sin_family = AF_INET;
+  sin.sin_addr.s_addr = INADDR_ANY;
+  sin.sin_port = 0;
+
+  sock = socket (AF_INET, SOCK_STREAM, 0);
+  if (sock < 0) {
+    nns_edge_loge ("Failed to get available port, socket creation failure.");
+    return 0;
+  }
+
+  if (bind (sock, (struct sockaddr *) &sin, sizeof (struct sockaddr)) == 0) {
+    if (getsockname (sock, (struct sockaddr *) &sin, &len) == 0) {
+      port = ntohs (sin.sin_port);
+      nns_edge_logi ("Available port number: %d", port);
+    } else {
+      nns_edge_logw ("Failed to read local socket info.");
+    }
+  }
+  close (sock);
+
+  return port;
+}
+
 /**
  * @brief Allocate new memory and copy bytes.
  * @note Caller should release newly allocated memory using free().
index ab6d36e43082fb8d90f056086dc019aae032a849..8864fece0a6e8abfe88f29a0a4854ed580b6a8d3 100644 (file)
 #define __NNSTREAMER_EDGE_COMMON_H__
 
 #include <glib.h> /** @todo remove glib */
+#include <fcntl.h>
+#include <netinet/tcp.h>
+#include <netinet/in.h>
 #include <pthread.h>
+#include <unistd.h>
 #include "nnstreamer-edge.h"
 
 #ifdef __cplusplus
@@ -80,6 +84,11 @@ typedef struct {
 #define nns_edge_logd g_debug
 #define nns_edge_logf g_error
 
+/**
+ * @brief Internal util function to get available port number.
+ */
+int nns_edge_get_available_port (void);
+
 /**
  * @brief Allocate new memory and copy bytes.
  * @note Caller should release newly allocated memory using free().
index af2e4968913c44eb863369822f47a7b511967eb8..7bd859fdb238025b61e33fd7fdb3b328fcfcbfa1 100644 (file)
@@ -169,37 +169,6 @@ _get_host_str (const char *ip, const int port, char **host)
   *host = nns_edge_strdup_printf ("%s:%d", ip, port);
 }
 
-/**
- * @brief Get available port number.
- */
-static int
-_get_available_port (void)
-{
-  struct sockaddr_in sin;
-  int port = 0, sock;
-  socklen_t len = sizeof (struct sockaddr);
-
-  sin.sin_family = AF_INET;
-  sin.sin_addr.s_addr = INADDR_ANY;
-  sock = socket (AF_INET, SOCK_STREAM, 0);
-  if (sock < 0) {
-    nns_edge_loge ("Failed to get available port. Socket creation failure.");
-    return 0;
-  }
-  sin.sin_port = port;
-  if (bind (sock, (struct sockaddr *) &sin, sizeof (struct sockaddr)) == 0) {
-    if (getsockname (sock, (struct sockaddr *) &sin, &len) == 0) {
-      port = ntohs (sin.sin_port);
-      nns_edge_logi ("Available port number: %d", port);
-    } else {
-      nns_edge_logw ("Failed to read local socket info.");
-    }
-  }
-  close (sock);
-
-  return port;
-}
-
 /**
  * @brief Internal function to check connection.
  */
@@ -1020,7 +989,7 @@ nns_edge_start (nns_edge_h edge_h, bool is_server)
 
   eh->is_server = is_server;
   if (!is_server && 0 == eh->recv_port) {
-    eh->recv_port = _get_available_port ();
+    eh->recv_port = nns_edge_get_available_port ();
     if (eh->recv_port <= 0) {
       nns_edge_loge ("Failed to start edge. Cannot get available port.");
       nns_edge_unlock (eh);
index fa0dd58b16e7b5cb8200005ca780b283edb42e04..34b8004854ce378dc4da32a325d1a92df4f2aa97 100644 (file)
@@ -20,8 +20,6 @@ extern "C" {
 
 #include "nnstreamer-edge.h"
 #include <gio/gio.h>
-#include <netinet/tcp.h>
-#include <netinet/in.h>
 
 /**
  * @brief Data structure for edge handle.