From 2612d4811f72395354fd895daffd494edc46fbfe Mon Sep 17 00:00:00 2001
From: wangzhengquan <wangzhengquan85@126.com>
Date: 星期二, 04 八月 2020 16:27:51 +0800
Subject: [PATCH] fix sendandrecv

---
 src/socket/shm_socket.c         |    5 ++++-
 src/util/sem_util.c             |    3 ++-
 test_socket/dgram_mod_req_rep.c |   16 +++++++++++++++-
 3 files changed, 21 insertions(+), 3 deletions(-)

diff --git a/src/socket/shm_socket.c b/src/socket/shm_socket.c
index c6d9dcb..61990e5 100644
--- a/src/socket/shm_socket.c
+++ b/src/socket/shm_socket.c
@@ -358,10 +358,13 @@
   int rv;
 
   shm_socket_t *tmp_socket = shm_open_socket(SHM_SOCKET_DGRAM);
-  if (shm_sendto(tmp_socket, send_buf, send_size, send_port, timeout, flags) == 0) {
+  if ((rv = shm_sendto(tmp_socket, send_buf, send_size, send_port, timeout, flags)) == 0) {
     rv = shm_recvfrom(tmp_socket, recv_buf, recv_size, &recv_port, timeout, flags);
     shm_close_socket(tmp_socket);
     return rv;
+  } else {
+    shm_close_socket(tmp_socket);
+    return rv;
   }
   return -1;
 }
diff --git a/src/util/sem_util.c b/src/util/sem_util.c
index bf08adf..e7c98b9 100644
--- a/src/util/sem_util.c
+++ b/src/util/sem_util.c
@@ -4,6 +4,7 @@
 static Logger logger = LoggerFactory::getLogger();
 
 int SemUtil::get(key_t key, unsigned int value) {
+// printf("==================SemUtil::get===============================\n");
   int semid, perms;
 
   perms = S_IRUSR | S_IWUSR;
@@ -113,7 +114,7 @@
 
   while (semtimedop(semId, &sops, 1, timeout) == -1)
     if (errno != EINTR) {
-      //err_msg(errno, "SemUtil::dec_timeout");
+      err_msg(errno, "SemUtil::dec_timeout");
       return -1;
     }
 
diff --git a/test_socket/dgram_mod_req_rep.c b/test_socket/dgram_mod_req_rep.c
index 4ec451f..746ae19 100644
--- a/test_socket/dgram_mod_req_rep.c
+++ b/test_socket/dgram_mod_req_rep.c
@@ -72,6 +72,20 @@
   dgram_mod_close_socket(socket);
 }
 
+void client2(int port) {
+  void *socket = dgram_mod_open_socket();
+  int size;
+  void *recvbuf;
+  char sendbuf[512];
+  while (true) {
+    sprintf(sendbuf, "hello\n" );
+    dgram_mod_sendandrecv(socket, sendbuf, strlen(sendbuf) + 1, port, &recvbuf, &size);
+    printf("reply: %s\n", (char *)recvbuf);
+    free(recvbuf);
+  }
+  dgram_mod_close_socket(socket);
+}
+
 
 
 void *runclient(void *arg) {
@@ -152,7 +166,7 @@
   }
 
   if (strcmp("client", argv[1]) == 0)
-    client(port);
+    client2(port);
 
   
   return 0;

--
Gitblit v1.8.0