From 91ea20d03ebb5a8d20150d3ecc28a13c51ce93f1 Mon Sep 17 00:00:00 2001 From: wangzhengquan <wangzhengquan85@126.com> Date: 星期五, 22 一月 2021 19:17:06 +0800 Subject: [PATCH] update --- src/socket/shm_mod_socket.cpp | 56 ++++++++++++++++++++++++-------------------------------- 1 files changed, 24 insertions(+), 32 deletions(-) diff --git a/src/socket/shm_mod_socket.cpp b/src/socket/shm_mod_socket.cpp index 6e622a8..6501f1e 100644 --- a/src/socket/shm_mod_socket.cpp +++ b/src/socket/shm_mod_socket.cpp @@ -9,7 +9,6 @@ } ShmModSocket::ShmModSocket() { - mod = (socket_mod_t)0; shm_socket = shm_open_socket(SHM_SOCKET_DGRAM); bus_set = new std::set<int>; } @@ -52,39 +51,32 @@ } // 鍙戦�佷俊鎭珛鍒昏繑鍥炪�� int ShmModSocket::sendto_nowait( const void *buf, const int size, const int key){ - return shm_sendto(shm_socket, buf, size, key, NULL, (int)SHM_MSG_NOWAIT); + return shm_sendto(shm_socket, buf, size, key, NULL, (int)BUS_NOWAIT_FLAG); } + - -inline int ShmModSocket::_recvfrom_(void **buf, int *size, int *key, struct timespec *timeout, int flags) { - - if(mod == BUS) { - logger->error("Can not use method recvfrom in a Bus"); - exit(1); - } -// 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 = shm_recvfrom(shm_socket, buf, size, key, NULL, 0); + + 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 = shm_recvfrom(shm_socket, buf, size, key, timeout, BUS_TIMEOUT_FLAG); + return rv; } int ShmModSocket::recvfrom_nowait( void **buf, int *size, int *key){ - return _recvfrom_(buf, size, key, NULL, (int)SHM_MSG_NOWAIT); + int rv = shm_recvfrom(shm_socket, buf, size, key, NULL, BUS_NOWAIT_FLAG); + // logger->error(rv, "ShmModSocket::recvfrom_nowait failed!"); + return rv; } /** @@ -100,7 +92,7 @@ return shm_sendandrecv(shm_socket, send_buf, send_size, send_key, recv_buf, recv_size, timeout, 0); } int ShmModSocket::sendandrecv_nowait(const void *send_buf, const int send_size, const int send_key, void **recv_buf, int *recv_size){ - return shm_sendandrecv(shm_socket, send_buf, send_size, send_key, recv_buf, recv_size, 0, (int)SHM_MSG_NOWAIT); + return shm_sendandrecv(shm_socket, send_buf, send_size, send_key, recv_buf, recv_size, 0, (int)BUS_NOWAIT_FLAG); } int ShmModSocket::sendandrecv_unsafe( const void *send_buf, const int send_size, const int send_key, void **recv_buf, int *recv_size){ @@ -111,7 +103,7 @@ return shm_sendandrecv_unsafe(shm_socket, send_buf, send_size, send_key, recv_buf, recv_size, timeout, 0); } int ShmModSocket::sendandrecv_unsafe_nowait(const void *send_buf, const int send_size, const int send_key, void **recv_buf, int *recv_size){ - return shm_sendandrecv_unsafe(shm_socket, send_buf, send_size, send_key, recv_buf, recv_size, 0, (int)SHM_MSG_NOWAIT); + return shm_sendandrecv_unsafe(shm_socket, send_buf, send_size, send_key, recv_buf, recv_size, 0, (int)BUS_NOWAIT_FLAG); } @@ -131,7 +123,7 @@ return _sub_(topic, size, key, timeout, 0); } int ShmModSocket::sub_nowait(char *topic, int size, int key) { - return _sub_(topic, size, key, NULL, (int)SHM_MSG_NOWAIT); + return _sub_(topic, size, key, NULL, (int)BUS_NOWAIT_FLAG); } @@ -150,7 +142,7 @@ return _desub_(topic, size, key, timeout, 0); } int ShmModSocket::desub_nowait(char *topic, int size, int key) { - return _desub_(topic, size, key, NULL, (int)SHM_MSG_NOWAIT); + return _desub_(topic, size, key, NULL, (int)BUS_NOWAIT_FLAG); } @@ -169,7 +161,7 @@ return _pub_( topic, topic_size, content, content_size, key, timeout, 0); } int ShmModSocket::pub_nowait(char *topic, int topic_size, void *content, int content_size, int key){ - return _pub_(topic, topic_size, content, content_size, key, NULL, (int)SHM_MSG_NOWAIT); + return _pub_(topic, topic_size, content, content_size, key, NULL, (int)BUS_NOWAIT_FLAG); } @@ -188,14 +180,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 +225,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