From 803d392aeb11665a3e34f7be83f972a1fc7d39c0 Mon Sep 17 00:00:00 2001 From: wangzhengquan <wangzhengquan85@126.com> Date: 星期四, 04 二月 2021 15:47:39 +0800 Subject: [PATCH] update --- test_net_socket/test_net_mod_socket.cpp | 11 ++++++----- src/socket/shm_socket.cpp | 25 ++++++++++++++----------- 2 files changed, 20 insertions(+), 16 deletions(-) diff --git a/src/socket/shm_socket.cpp b/src/socket/shm_socket.cpp index 39c79b5..8fef2f7 100644 --- a/src/socket/shm_socket.cpp +++ b/src/socket/shm_socket.cpp @@ -191,7 +191,7 @@ return rv; } - while(true) { + while(tryn > 0) { tryn--; recvbufIter = sockt->recvbuf.find(uuid); if(recvbufIter != sockt->recvbuf.end()) { @@ -199,36 +199,37 @@ logger->debug("get from recvbuf: %s", uuid.c_str()); recvpak = recvbufIter->second; sockt->recvbuf.erase(recvbufIter); - break; + goto LABLE_SUC; } rv = shm_recvpakfrom(sockt, &recvpak, timeout, flags); if (rv != 0) { - if(rv == ETIMEDOUT) + if(rv == ETIMEDOUT) { return EBUS_TIMEOUT; + } logger->debug("%d shm_recvfrom failed %s", shm_socket_get_key(sockt), bus_strerror(rv)); return rv; } logger->debug("send uuid:%s, recv uuid: %s", uuid.c_str(), recvpak.uuid); - if (strncmp(uuid.c_str(), recvpak.uuid, sizeof recvpak.uuid) == 0) { + if(strlen(recvpak.uuid) == 0) { + continue; + } else if (strncmp(uuid.c_str(), recvpak.uuid, sizeof recvpak.uuid) == 0) { // 鍙戦�佷笌鎺ュ彈鐨刄UID鍖归厤鎴愬姛 - break; + goto LABLE_SUC; } else { // 绛旈潪鎵�闂紝鏀惧埌缂撳瓨閲� sockt->recvbuf.insert({recvpak.uuid, recvpak}); continue; } - - if(tryn == 0) { - // 灏濊瘯浜唗ryn娆¢兘娌℃湁鎴愬姛 - return EBUS_RECVFROM_WRONG_END; - } - } + +LABLE_FAIL: + return EBUS_RECVFROM_WRONG_END; + // return rv; LABLE_SUC: if(recv_buf != NULL) { @@ -244,6 +245,8 @@ return 0; + + } /** diff --git a/test_net_socket/test_net_mod_socket.cpp b/test_net_socket/test_net_mod_socket.cpp index 7f659c2..2ebbd06 100644 --- a/test_net_socket/test_net_mod_socket.cpp +++ b/test_net_socket/test_net_mod_socket.cpp @@ -131,11 +131,12 @@ } } -void *ser; +void *serverSockt; + static void _recvandsend_callback_(void *recvbuf, int recvsize, int key, void **sendbuf_ptr, int *sendsize_ptr, void * user_data) { char sendbuf[512]; printf( "server: RECEIVED REQUEST FROM %d : %s\n", key, (char *)recvbuf); - sprintf(sendbuf, "%d RECEIVED %s", net_mod_socket_get_key(ser), (char *)recvbuf); + sprintf(sendbuf, "%d RECEIVED %s", net_mod_socket_get_key(serverSockt), (char *)recvbuf); // buf 鍜� size鏄繑鍥炲�� *sendbuf_ptr = sendbuf; *sendsize_ptr = strlen(sendbuf) + 1; @@ -147,12 +148,12 @@ void start_reply(int mkey) { printf("start reply\n"); - ser = net_mod_socket_open(); - net_mod_socket_bind(ser, mkey); + serverSockt = net_mod_socket_open(); + net_mod_socket_bind(serverSockt, mkey); int rv; while(true) { - rv = net_mod_socket_recvandsend_timeout(ser, _recvandsend_callback_ , 0, 2000000, NULL ); + rv = net_mod_socket_recvandsend_timeout(serverSockt, _recvandsend_callback_ , 0, 2000000, NULL ); } // while ( (rv = net_mod_socket_recvfrom(ser, &recvbuf, &size, &key) ) == 0) { // // printf( "server: RECEIVED REQUEST FROM %d NAME %s\n", key, recvbuf); -- Gitblit v1.8.0