From 53e55dbd8709a2f948cf80305545fe88ff93169a Mon Sep 17 00:00:00 2001
From: wangzhengquan <wangzhengquan85@126.com>
Date: 星期五, 08 一月 2021 16:03:10 +0800
Subject: [PATCH] udpate

---
 src/socket/shm_socket.cpp |   35 ++++++++++++++++++++++++++++++++---
 1 files changed, 32 insertions(+), 3 deletions(-)

diff --git a/src/socket/shm_socket.cpp b/src/socket/shm_socket.cpp
index 0ae3027..3e2dea9 100644
--- a/src/socket/shm_socket.cpp
+++ b/src/socket/shm_socket.cpp
@@ -49,7 +49,7 @@
   int s, type;
   pthread_mutexattr_t mtxAttr;
 
-  logger->debug("shm_open_socket\n");
+  // logger->debug("shm_open_socket\n");
   shm_socket_t *socket = (shm_socket_t *)calloc(1, sizeof(shm_socket_t));
   socket->socket_type = socket_type;
   socket->key = -1;
@@ -78,7 +78,7 @@
   
   int ret, s;
   
-  logger->debug("shm_close_socket\n");
+  // logger->debug("shm_close_socket\n");
   switch (socket->socket_type) {
     case SHM_SOCKET_STREAM:
       ret =  _shm_close_stream_socket(socket, true);
@@ -499,7 +499,7 @@
 
 
 
-int shm_sendandrecv_safe(shm_socket_t *socket, const void *send_buf,
+int shm_sendandrecv_safe2(shm_socket_t *socket, const void *send_buf,
                     const int send_size, const int send_key, void **recv_buf,
                     int *recv_size,  struct timespec *timeout,  int flags) {
   int recv_key;
@@ -547,6 +547,35 @@
   return -1;
 }
 
+int shm_sendandrecv_safe(shm_socket_t *socket, const void *send_buf,
+                    const int send_size, const int send_key, void **recv_buf,
+                    int *recv_size,  struct timespec *timeout,  int flags) {
+  int recv_key;
+  int rv;
+
+  // 鐢╰hread local 淇濊瘉姣忎釜绾跨▼鐢ㄤ竴涓嫭鍗犵殑socket鎺ュ彈瀵规柟杩斿洖鐨勪俊鎭�
+  shm_socket_t *tmp_socket;
+
+  if (socket->socket_type != SHM_SOCKET_DGRAM) {
+    logger->error( "shm_socket.shm_sendandrecv: Can't invoke shm_sendandrecv method in a %d type socket  "
+                "which is not a SHM_SOCKET_DGRAM socket ",
+             socket->socket_type);
+    exit(1);
+  }
+ 
+  /* If first call from this thread, allocate buffer for thread, and save its location */
+  // logger->debug("%d create tmp socket\n", pthread_self() );
+  tmp_socket = shm_open_socket(SHM_SOCKET_DGRAM);
+
+  if ((rv = shm_sendto(tmp_socket, send_buf, send_size, send_key, timeout, flags)) == 0) {
+    rv = shm_recvfrom(tmp_socket, recv_buf, recv_size, &recv_key, timeout, flags);
+  } 
+   
+  shm_close_socket(tmp_socket);  
+  return rv;
+ 
+}
+
 int shm_sendandrecv_unsafe(shm_socket_t *socket, const void *send_buf,
                     const int send_size, const int send_key, void **recv_buf,
                     int *recv_size,  struct timespec *timeout,  int flags) {

--
Gitblit v1.8.0