From 8df2b63c21d0aabaa894930e3ab1ea63c49d47ff Mon Sep 17 00:00:00 2001
From: wangzhengquan <wangzhengquan85@126.com>
Date: 星期三, 13 一月 2021 17:54:51 +0800
Subject: [PATCH] fix bug invalid argument

---
 src/socket/shm_mod_socket.cpp |   32 +++++++++++++++++++-------------
 1 files changed, 19 insertions(+), 13 deletions(-)

diff --git a/src/socket/shm_mod_socket.cpp b/src/socket/shm_mod_socket.cpp
index 6e622a8..8a9133d 100644
--- a/src/socket/shm_mod_socket.cpp
+++ b/src/socket/shm_mod_socket.cpp
@@ -65,26 +65,32 @@
 // printf("dgram_mod_recvfrom  before\n");
 	int rv = shm_recvfrom(shm_socket, buf, size, key, timeout, flags);
 // printf("dgram_mod_recvfrom  after\n");
+
 	return rv;
 }
+
 /**
  * 鎺ユ敹淇℃伅
  * @key 浠庤皝鍝噷鏀跺埌鐨勪俊鎭�
  * @return 0 鎴愬姛锛� 鍏朵粬鍊� 澶辫触鐨勯敊璇爜
 */
 int ShmModSocket::recvfrom(void **buf, int *size, int *key) {
-		
-		return  _recvfrom_( buf, size, key, NULL, 0);
+	int rv =  _recvfrom_( buf, size, key, NULL, 0);
+	// logger->error(rv, "ShmModSocket::recvfrom failed!");
+  return rv;
 }
 
 
 // 鎺ュ彈淇℃伅瓒呮椂杩斿洖銆� @sec 绉� 锛� @nsec 绾崇
 int ShmModSocket::recvfrom_timeout( void **buf, int *size, int *key, struct timespec *timeout) {
-	return _recvfrom_(buf, size, key, timeout, 0);
+	int rv =  _recvfrom_(buf, size, key, timeout, 0);
+ 	return rv;
 }
 
 int ShmModSocket::recvfrom_nowait( void **buf, int *size, int *key){
-	return _recvfrom_(buf, size, key, NULL, (int)SHM_MSG_NOWAIT);
+	int rv =  _recvfrom_(buf, size, key, NULL, (int)SHM_MSG_NOWAIT);
+	// logger->error(rv, "ShmModSocket::recvfrom_nowait failed!");
+  return rv;
 }
 
 /**
@@ -188,14 +194,7 @@
  */
 int  ShmModSocket::_sub_(char *topic, int topic_size, int key,  
 	struct timespec *timeout, int flags) {
-	// char buf[8192];
-	// int rv;
-	// snprintf(buf,  8192, "%ssub%s%s%s%s", ACTION_LIDENTIFIER, ACTION_RIDENTIFIER, TOPIC_LIDENTIFIER, topic, TOPIC_RIDENTIFIER);
-	// rv = shm_sendto(shm_socket, buf, strlen(buf) + 1, key, timeout, flags);
-	// if(rv == 0) {
-	// 	bus_set->insert(key);
-	// }
-	// return rv;
+	 
 
 	int ret;
 	bus_head_t head = {};
@@ -240,7 +239,14 @@
 	if(size > 0) {
 		ret = shm_sendto(shm_socket, buf, size, key, timeout, flags);
 		free(buf);
-		return ret;
+		if(ret == EBUS_TIMEOUT) {
+	    logger->error(ret, "ShmModSocket::_desub_ key %d failed, %s", key, bus_strerror(EBUS_TIMEOUT));
+	    return EBUS_TIMEOUT;
+	  } else {
+	    logger->error(ret, "ShmModSocket::_desub_ key %d failed!", key);
+	    return ret;
+	  }
+		
 	} else {
 		return -1;
 	}

--
Gitblit v1.8.0