wangzhengquan
2021-02-04 803d392aeb11665a3e34f7be83f972a1fc7d39c0
update
2个文件已修改
36 ■■■■■ 已修改文件
src/socket/shm_socket.cpp 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
test_net_socket/test_net_mod_socket.cpp 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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) {
      // 发送与接受的UUID匹配成功
      break;
      goto LABLE_SUC;
    } else {
      // 答非所问,放到缓存里
      sockt->recvbuf.insert({recvpak.uuid, recvpak});
      continue;
    }
    if(tryn == 0) {
      // 尝试了tryn次都没有成功
      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;
}
/**
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);