From 9253cb2c237391b5df174950163d2bfd15a96eba Mon Sep 17 00:00:00 2001 From: Jaeyun Date: Mon, 11 Jul 2022 18:26:09 +0900 Subject: [PATCH] [Socket] condition to check socket Check socket state before sending/receiving the edge command. Signed-off-by: Jaeyun --- .../nnstreamer-edge-internal.c | 59 ++++++++++--------- 1 file changed, 32 insertions(+), 27 deletions(-) diff --git a/src/libnnstreamer-edge/nnstreamer-edge-internal.c b/src/libnnstreamer-edge/nnstreamer-edge-internal.c index 8287584..d50b4e8 100644 --- a/src/libnnstreamer-edge/nnstreamer-edge-internal.c +++ b/src/libnnstreamer-edge/nnstreamer-edge-internal.c @@ -203,6 +203,28 @@ _get_available_port (void) return port; } +/** + * @brief Internal function to check connection. + */ +static bool +_nns_edge_check_connection (nns_edge_conn_s * conn) +{ + GIOCondition condition; + + if (!conn || !conn->socket || g_socket_is_closed (conn->socket)) + return false; + + condition = g_socket_condition_check (conn->socket, + G_IO_IN | G_IO_OUT | G_IO_PRI | G_IO_ERR | G_IO_HUP); + + if (!condition || (condition & (G_IO_ERR | G_IO_HUP))) { + nns_edge_logw ("Socket is not available, possibly closed."); + return false; + } + + return true; +} + /** * @brief initialize edge command. */ @@ -277,6 +299,11 @@ _nns_edge_cmd_send (nns_edge_conn_s * conn, nns_edge_cmd_s * cmd) return NNS_EDGE_ERROR_INVALID_PARAMETER; } + if (!_nns_edge_check_connection (conn)) { + nns_edge_loge ("Failed to send command, socket has error."); + return NNS_EDGE_ERROR_IO; + } + if (!_send_raw_data (conn->socket, &cmd->info, sizeof (nns_edge_cmd_info_s), conn->cancellable)) { nns_edge_loge ("Failed to send command to socket."); @@ -306,6 +333,11 @@ _nns_edge_cmd_receive (nns_edge_conn_s * conn, nns_edge_cmd_s * cmd) if (!conn || !cmd) return NNS_EDGE_ERROR_INVALID_PARAMETER; + if (!_nns_edge_check_connection (conn)) { + nns_edge_loge ("Failed to receive command, socket has error."); + return NNS_EDGE_ERROR_IO; + } + if (!_receive_raw_data (conn->socket, &cmd->info, sizeof (nns_edge_cmd_info_s), conn->cancellable)) { nns_edge_loge ("Failed to receive command from socket."); @@ -496,30 +528,6 @@ _nns_edge_remove_connection (gpointer data) } } -/** - * @brief Internal function to check connection. - */ -static bool -_nns_edge_check_connection (nns_edge_conn_s * conn) -{ - size_t size; - GIOCondition condition; - - if (!conn) - return false; - - condition = g_socket_condition_check (conn->socket, - G_IO_IN | G_IO_PRI | G_IO_ERR | G_IO_HUP); - size = g_socket_get_available_bytes (conn->socket); - - if (condition && size <= 0) { - nns_edge_logw ("Socket is not available, possibly EOS."); - return false; - } - - return true; -} - /** * @brief Get socket address */ @@ -730,9 +738,6 @@ _nns_edge_message_handler (void *thread_data) break; } - if (!_nns_edge_check_connection (conn)) - break; - /** Receive data from the client */ _nns_edge_cmd_init (&cmd, _NNS_EDGE_CMD_ERROR, client_id); ret = _nns_edge_cmd_receive (conn, &cmd); -- 2.34.1