From 26ed48c4e616014ee760fd13d13dbdc8539c34e3 Mon Sep 17 00:00:00 2001 From: wangzhengquan <wangzhengquan85@126.com> Date: 星期二, 22 十二月 2020 19:21:55 +0800 Subject: [PATCH] 解决sendandrecv发送到一个不存在key的情况 --- src/socket/net_mod_socket.c | 60 +++++++++++++++++++++++++++++++----------------------------- 1 files changed, 31 insertions(+), 29 deletions(-) diff --git a/src/socket/net_mod_socket.c b/src/socket/net_mod_socket.c index b0b939f..48b0e7c 100644 --- a/src/socket/net_mod_socket.c +++ b/src/socket/net_mod_socket.c @@ -85,7 +85,7 @@ int i, n, recv_size, connfd; net_node_t *node; - void *recv_buf; + void *recv_buf = NULL; net_mod_request_head_t request_head = {}; @@ -107,8 +107,8 @@ mpool = (NetConnPool *)pthread_getspecific(poolKey); if (mpool == NULL) { - /* If first call from this thread, allocate - buffer for thread, and save its location */ + /* If first call from this thread, allocate buffer for thread, and save its location */ + logger->debug("Create connPool"); mpool = new NetConnPool(); if (mpool == NULL) { LoggerFactory::getLogger()->error(errno, "NetModSocket::_sendandrecv_ malloc"); @@ -129,15 +129,17 @@ for (i = 0; i< arrlen; i++) { node = &node_arr[i]; - if(node->host == NULL) { + if(node->host == NULL || strcmp(node->host, "") == 0 ) { // 鏈湴鍙戦�� - shmModSocket.sendandrecv(send_buf, send_size, node->key, &recv_buf, &recv_size); - strcpy( ret_arr[n_recv_suc].host,"localshm"); - ret_arr[n_recv_suc].port = 0; - ret_arr[n_recv_suc].key = node->key; - ret_arr[n_recv_suc].content = recv_buf; - ret_arr[n_recv_suc].content_length = recv_size; - n_recv_suc++; + if(shmModSocket.sendandrecv(send_buf, send_size, node->key, &recv_buf, &recv_size) == 0) { + strcpy( ret_arr[n_recv_suc].host,""); + ret_arr[n_recv_suc].port = 0; + ret_arr[n_recv_suc].key = node->key; + ret_arr[n_recv_suc].content = recv_buf; + ret_arr[n_recv_suc].content_length = recv_size; + n_recv_suc++; + } + continue; } @@ -235,6 +237,17 @@ } + +void NetModSocket::free_recv_msg_arr(net_mod_recv_msg_t * arr, size_t size) { + + for(int i =0; i< size; i++) { + if(arr[i].content != NULL) + free(arr[i].content); + } + free(arr); +} + + int NetModSocket::pub(net_node_t *node_arr, int arrlen, char *topic, int topic_size, void *content, int content_size) { return _pub_(node_arr, arrlen, topic, topic_size, content, content_size, -1); } @@ -287,7 +300,13 @@ } } - + // 鏈湴鍙戦�� + if(node_arr == NULL || arrlen == 0) { + if(shmModSocket.pub(topic, topic_size, content, content_size, node->key) == 0 ) { + n_pub_suc++; + } + } + for (i = 0; i < arrlen; i++) { node = &node_arr[i]; @@ -560,15 +579,6 @@ /** - * 鍚姩bus - * - * @return 0 鎴愬姛锛� 鍏朵粬鍊� 澶辫触鐨勯敊璇爜 -*/ -int NetModSocket::start_bus() { - return shmModSocket.start_bus(); -} - -/** * 璁㈤槄鎸囧畾涓婚 * @topic 涓婚 * @size 涓婚闀垮害 @@ -634,14 +644,6 @@ return shmModSocket.get_key(); } - -void NetModSocket::free_recv_msg_arr(net_mod_recv_msg_t * arr, size_t size) { - - for(int i =0; i< size; i++) { - free(arr[i].content); - } - free(arr); -} -- Gitblit v1.8.0