wangzhengquan
2021-02-05 607ac3ae8bfc017e10a7907e69dcbc3ab2a0fb63
src/socket/shm_socket.cpp
@@ -112,23 +112,31 @@
int shm_close_socket(shm_socket_t *sockt) {
  
  int s;
  int rv;
  logger->debug("shm_close_socket\n");
  if(sockt->queue != NULL) {
    delete sockt->queue;
    sockt->queue = NULL;
  }
  s =  pthread_mutex_destroy(&(sockt->mutex) );
  if(s != 0) {
    err_exit(s, "shm_close_socket");
  rv =  pthread_mutex_destroy(&(sockt->mutex) );
  if(rv != 0) {
    err_exit(rv, "shm_close_socket");
  }
  free(sockt);
  return 0;
}
int shm_socket_stop(shm_socket_t *sockt) {
  struct timespec timeout = {5, 0};
  shm_packet_t sendpak = {0};
  sendpak.key = sockt->key;
  sendpak.action = BUS_ACTION_STOP;
  sendpak.size = 0;
  return shm_sendpakto(sockt, &sendpak, sockt->key, &timeout, BUS_TIMEOUT_FLAG);
}
int shm_socket_bind(shm_socket_t *sockt, int key) {
  sockt->key = key;
@@ -175,6 +183,7 @@
  shm_packet_t sendpak;
  shm_packet_t recvpak;
  std::map<std::string, shm_packet_t>::iterator recvbufIter;
  std::string uuid = sole::uuid4().str();
  
  sendpak.key = sockt->key;
@@ -507,7 +516,7 @@
  
 
 LABEL_PUSH: 
  if (key == sockt->key) {
  if (sendpak->action != BUS_ACTION_STOP && key == sockt->key) {
    logger->error( "can not send to your self!");
    return EBUS_SENDTO_SELF;
  }
@@ -527,10 +536,11 @@
}
// 短连接方式接受
static int shm_recvpakfrom(shm_socket_t *sockt, shm_packet_t *recvpak ,  const struct timespec *timeout,  int flag) {
static int shm_recvpakfrom(shm_socket_t *sockt, shm_packet_t *_recvpak ,  const struct timespec *timeout,  int flag) {
  int rv;
  
  hashtable_t *hashtable = mm_get_hashtable();
  shm_packet_t recvpak;
  if( sockt->queue != NULL) 
    goto LABEL_POP;
@@ -557,11 +567,18 @@
  
LABEL_POP:
 //
  // printf("%p start recv.....\n", sockt);
 
  printf("%p start recv.....\n", sockt);
  rv = sockt->queue->pop(recvpak, timeout, flag);
  if(rv != 0)
    return rv;
 
  rv = sockt->queue->pop(*recvpak, timeout, flag);
  if(recvpak.action == BUS_ACTION_STOP) {
    return EBUS_STOPED;
  }
  *_recvpak = recvpak;
  return rv;
}
// int shm_sendandrecv(shm_socket_t *sockt, const void *send_buf,