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