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