From 4c5f465bf37e7c21d3434594414ab58c2eb99e98 Mon Sep 17 00:00:00 2001 From: wangzhengquan <wangzhengquan85@126.com> Date: 星期一, 01 二月 2021 15:17:25 +0800 Subject: [PATCH] update --- src/net/net_mod_socket_wrapper.cpp | 12 ++++++------ src/bus_error.cpp | 2 +- src/socket/shm_socket.cpp | 44 ++++++++++++++++++++++++++------------------ 3 files changed, 33 insertions(+), 25 deletions(-) diff --git a/src/bus_error.cpp b/src/bus_error.cpp index fe20cea..e44e5ef 100644 --- a/src/bus_error.cpp +++ b/src/bus_error.cpp @@ -13,7 +13,7 @@ static char *_bus_errlist[_bus_nerr] = { "\0", - "Timeout", + "Timed out", "The other end is not inline", "Key already in use", "Network fault", diff --git a/src/net/net_mod_socket_wrapper.cpp b/src/net/net_mod_socket_wrapper.cpp index e8020a2..683c543 100644 --- a/src/net/net_mod_socket_wrapper.cpp +++ b/src/net/net_mod_socket_wrapper.cpp @@ -53,8 +53,8 @@ int net_mod_socket_sendto_timeout(void *_socket, const void *buf, const int size, const int key, int sec, int nsec){ NetModSocket *sockt = (NetModSocket *)_socket; logger->debug("net_mod_socket_sendto: %d sendto %d", net_mod_socket_get_key(_socket), key); - // return sockt->sendto_timeout(buf, size, key, sec, nsec); - return sockt->sendto(buf, size, key); + return sockt->sendto_timeout(buf, size, key, sec, nsec); + // return sockt->sendto(buf, size, key); } // 鍙戦�佷俊鎭珛鍒昏繑鍥炪�� int net_mod_socket_sendto_nowait(void *_socket, const void *buf, const int size, const int key){ @@ -80,8 +80,8 @@ // 鎺ュ彈淇℃伅瓒呮椂杩斿洖銆� @sec 绉� 锛� @nsec 绾崇 int net_mod_socket_recvfrom_timeout(void *_socket, void **buf, int *size, int *key, int sec, int nsec){ NetModSocket *sockt = (NetModSocket *)_socket; - return sockt->recvfrom(buf, size, key); - //return sockt->recvfrom_timeout(buf, size, key, sec, nsec); + // return sockt->recvfrom(buf, size, key); + return sockt->recvfrom_timeout(buf, size, key, sec, nsec); } int net_mod_socket_recvfrom_nowait(void *_socket, void **buf, int *size, int *key){ NetModSocket *sockt = (NetModSocket *)_socket; @@ -100,8 +100,8 @@ int net_mod_socket_sendandrecv_timeout(void *_socket, net_node_t *node_arr, int arrlen, void *send_buf, int send_size, net_mod_recv_msg_t ** recv_arr, int *recv_arr_size, int timeout){ NetModSocket *sockt = (NetModSocket *)_socket; - return sockt->sendandrecv(node_arr, arrlen, send_buf, send_size, recv_arr, recv_arr_size); - // return sockt->sendandrecv_timeout(node_arr, arrlen, send_buf, send_size, recv_arr, recv_arr_size, timeout); + // return sockt->sendandrecv(node_arr, arrlen, send_buf, send_size, recv_arr, recv_arr_size); + return sockt->sendandrecv_timeout(node_arr, arrlen, send_buf, send_size, recv_arr, recv_arr_size, timeout); } int net_mod_socket_sendandrecv_nowait(void *_socket, net_node_t *node_arr, int arrlen, void *send_buf, int send_size, diff --git a/src/socket/shm_socket.cpp b/src/socket/shm_socket.cpp index 5df83a3..6781380 100644 --- a/src/socket/shm_socket.cpp +++ b/src/socket/shm_socket.cpp @@ -18,7 +18,6 @@ -static int _shm_close_dgram_socket(shm_socket_t *socket); static void _destrory_socket_perthread(void *tmp_socket); @@ -41,11 +40,16 @@ LockFreeQueue<shm_msg_t> *queue; hashtable_lock(hashtable); void *tmp_ptr = hashtable_get(hashtable, key); - if (tmp_ptr == NULL || tmp_ptr == (void *)1 || force ) { + + + if (tmp_ptr == NULL || tmp_ptr == (void *)1 ) { queue = new LockFreeQueue<shm_msg_t>(16); hashtable_put(hashtable, key, (void *)queue); hashtable_unlock(hashtable); return queue; + } else if(force) { + hashtable_unlock(hashtable); + return (LockFreeQueue<shm_msg_t> *) queue; } hashtable_unlock(hashtable); @@ -94,7 +98,7 @@ socket->socket_type = socket_type; socket->key = 0; socket->force_bind = false; - // socket->dispatch_thread = 0; + socket->queue = NULL; s = pthread_mutexattr_init(&mtxAttr); @@ -119,7 +123,10 @@ int s; logger->debug("shm_close_socket\n"); - _shm_close_dgram_socket(socket); + if(socket->queue != NULL) { + delete socket->queue; + socket->queue = NULL; + } s = pthread_mutex_destroy(&(socket->mutex) ); if(s != 0) { @@ -180,6 +187,7 @@ } sockt->queue = shm_socket_bind_queue( sockt->key, sockt->force_bind); if(sockt->queue == NULL ) { + logger->error("%s. key = %d", bus_strerror(EBUS_KEY_INUSED), sockt->key); return EBUS_KEY_INUSED; } } @@ -216,8 +224,12 @@ return 0; } else { mm_free(dest.buf); - logger->debug("====%d sendto key %d failed %s", shm_socket_get_key(sockt), key, bus_strerror(rv)); - return rv; + if(rv == ETIMEDOUT) + return EBUS_TIMEOUT; + else { + logger->debug("====%d sendto key %d failed %s", shm_socket_get_key(sockt), key, bus_strerror(rv)); + return rv; + } } } @@ -244,6 +256,7 @@ } sokt->queue = shm_socket_bind_queue( sokt->key, sokt->force_bind); if(sokt->queue == NULL ) { + logger->error("%s. key = %d", bus_strerror(EBUS_KEY_INUSED), sokt->key); return EBUS_KEY_INUSED; } } @@ -271,8 +284,13 @@ mm_free(src.buf); return 0; } else { - logger->debug("shm_recvfrom failed %s", bus_strerror(rv)); - return rv; + if(rv == ETIMEDOUT) + return EBUS_TIMEOUT; + else { + logger->debug("%d shm_recvfrom failed %s", shm_socket_get_key(sockt), bus_strerror(rv)); + return rv; + } + } } @@ -423,15 +441,5 @@ // ============================================================================================================ - -int _shm_close_dgram_socket(shm_socket_t *socket){ - if(socket->queue != NULL) { - delete socket->queue; - socket->queue = NULL; - } - - return 0; -} - -- Gitblit v1.8.0