From 546bdaa58724ec6a19b56e800ad60963bd3bd1bc Mon Sep 17 00:00:00 2001 From: wangzhengquan <wangzhengquan85@126.com> Date: 星期四, 04 二月 2021 11:42:24 +0800 Subject: [PATCH] modify callback function --- src/socket/shm_socket.cpp | 30 ++++++++++-------------------- 1 files changed, 10 insertions(+), 20 deletions(-) diff --git a/src/socket/shm_socket.cpp b/src/socket/shm_socket.cpp index fbb849d..9ce94da 100644 --- a/src/socket/shm_socket.cpp +++ b/src/socket/shm_socket.cpp @@ -242,11 +242,11 @@ } /** - * @callback void (*recv_callback_fn)(void **sendbuf, int *sendsize) + * @callback void (*recvandsend_callback_fn)(void *recvbuf, int recvsize, int key, void **sendbuf, int *sendsize) * sendbuf 鍜� sendsize鏄痗allbak_fn鍥炶皟鍑芥暟鐨勮繑鍥炲��, 鍒嗗埆琛ㄧず鍙戦�佹暟鎹紝鍜屽彂閫佹暟鎹殑澶у皬銆� * */ -int shm_recvandsend(shm_socket_t *sockt, void **recvbuf, int *recvsize, int *key, recv_callback_fn callback, +int shm_recvandsend(shm_socket_t *sockt, recvandsend_callback_fn callback, const struct timespec *timeout, int flag, void *user_data) { int rv; @@ -257,31 +257,21 @@ rv = shm_recvpakfrom(sockt , &recvpak, timeout, flag); - - if (rv != 0) { - if(rv == ETIMEDOUT) + if(rv == ETIMEDOUT){ + logger->debug("%d shm_recvfrom failed %s", shm_socket_get_key(sockt), bus_strerror(EBUS_TIMEOUT)); return EBUS_TIMEOUT; + } - logger->debug("%d shm_recvfrom failed %s", shm_socket_get_key(sockt), bus_strerror(rv)); + logger->error("%d shm_recvfrom failed %s", shm_socket_get_key(sockt), bus_strerror(rv)); return rv; } - if(recvbuf != NULL) { - void *_buf = malloc(recvpak.size); - memcpy(_buf, recvpak.buf, recvpak.size); - *recvbuf = _buf; - } - - if(recvsize != NULL) - *recvsize = recvpak.size; - - if(key != NULL) - *key = recvpak.key; - + + void *recvbuf = malloc(recvpak.size); + memcpy(recvbuf, recvpak.buf, recvpak.size); mm_free(recvpak.buf); - - callback(&sendbuf, &sendsize, user_data); + callback(recvbuf, recvpak.size, recvpak.key, &sendbuf, &sendsize, user_data); shm_packet_t sendpak; sendpak.key = sockt->key; -- Gitblit v1.8.0