From f52f2c2828047c2f30d30fc1fe2b54d8db146d49 Mon Sep 17 00:00:00 2001
From: wangzhengquan <wangzhengquan85@126.com>
Date: 星期四, 25 二月 2021 15:56:35 +0800
Subject: [PATCH] update

---
 test_net_socket/shm_util.cpp |   50 ++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 38 insertions(+), 12 deletions(-)

diff --git a/test_net_socket/shm_util.cpp b/test_net_socket/shm_util.cpp
index c441930..549e29f 100644
--- a/test_net_socket/shm_util.cpp
+++ b/test_net_socket/shm_util.cpp
@@ -21,6 +21,8 @@
 
 struct argument_t {
   bool interactive;
+  bool force;
+  int bind;
   int port;
   int key;
   char *sendlist;
@@ -147,13 +149,18 @@
   }
 }
 
-void start_reply(int mkey) {
+void start_recvfrom(int mkey, bool force) {
   logger->debug("start reply\n");
   signal(SIGINT,  stop_replyserver_handler);
   signal(SIGTERM,  stop_replyserver_handler);
 
   serverSockt = net_mod_socket_open();
-  net_mod_socket_bind(serverSockt, mkey);
+  if(force) {
+    net_mod_socket_force_bind(serverSockt, mkey);
+  } else {
+    net_mod_socket_bind(serverSockt, mkey);
+  }
+  
  
   int rv = 0 ;
   while(  true) {
@@ -163,6 +170,9 @@
     if(rv == EBUS_STOPED) {
       logger->debug("Stopping\n");
       break;
+    } else if(rv == EBUS_KEY_INUSED){
+      printf("key宸茬粡琚崰鐢╘n");
+      exit(1);
     }
     logger->debug("net_mod_socket_recvandsend error.%s\n", bus_strerror(rv));
 
@@ -528,14 +538,18 @@
 void list () {
   LockFreeQueue<shm_packet_t> * mqueue;
   hashtable_t *hashtable = mm_get_hashtable();
-  printf("%10s \t %10s\n", "KEY", "LENGTH");
+  printf("%10s \t %-10s \t %10s\n", "KEY", "LENGTH", "STATUS");
   hashtable_foreach(hashtable, [&](int key, void * value){
     if(key >= 100 ) {
       mqueue = (LockFreeQueue<shm_packet_t> *)hashtable_get(hashtable, key);
-      printf("%d\n", key);
-      printf("%10d \t %10d\n", key, mqueue->size());
+      if((long)mqueue == 0x1) {
+        printf("%10d \t %-10s\n", key, "Not In Used");
+      } else {
+        printf("%10d \t %-10d\n", key, mqueue->size());
+      }
+     
     } else {
-      printf("%10d \t %10s\n", key, "");
+      printf("%10d\n", key);
     }
    
   });
@@ -571,7 +585,7 @@
   net_node_t node_arr[] = {NULL, 0, key};
 
   void * client = net_mod_socket_open();
-  n = net_mod_socket_sendandrecv_timeout(client, node_arr, 1, sendbuf, strlen(sendbuf) + 1, &recv_arr, &recv_arr_size, 5);
+  n = net_mod_socket_sendandrecv_timeout(client, node_arr, 1, sendbuf, strlen(sendbuf) + 1, &recv_arr, &recv_arr_size, 5000);
   if(n == 0) {
     printf("send failed\n");
     return;
@@ -617,6 +631,7 @@
   fpe("# remove  key 1001\n");
   fpe("./shm_util rm 1001\n");
   fpe("./shm_util info 1002\n");
+  fpe("./shm_util recvfrom --bind 1002 [--force]\n")
   fpe("\n");
 }
 
@@ -648,6 +663,8 @@
     {"key",  required_argument, 0, 'k'},
     {"port",  required_argument, 0, 'p'},
     {"interactive",  no_argument, 0, 'i'},
+    {"force",  no_argument, 0, 'f'},
+    {"bind",  required_argument, (int *)mopt.bind, 0},
     {"sendlist",  required_argument, (int *)mopt.sendlist, 0},
     {"publist",  required_argument, (int *)mopt.publist, 0},
     {0, 0, 0, 0}
@@ -658,7 +675,7 @@
   {
     
 
-    c = getopt_long (argc, argv, "+f:k:p:i", long_options, &option_index);
+    c = getopt_long (argc, argv, "+fk:p:i", long_options, &option_index);
 
     /* Detect the end of the options. */
     if (c == -1)
@@ -677,6 +694,9 @@
       else if(strcmp(long_options[option_index].name, "publist") == 0) {
         mopt.publist = optarg;
       }
+      else if(strcmp(long_options[option_index].name, "bind") == 0) {
+        mopt.bind = atoi(optarg);
+      }
       else {
         printf ("option %s", long_options[option_index].name);
         if (optarg)
@@ -692,6 +712,10 @@
 
     case 'i':
       mopt.interactive = true;
+      break;
+
+    case 'f':
+      mopt.force = true;
       break;
 
     case 'p':
@@ -781,7 +805,7 @@
   int i;
   char *prog;
   char * fun;
-  argument_t opt;
+  argument_t opt = {};
 
   shm_mm_wrapper_init(512);
 
@@ -853,13 +877,15 @@
     
   }
   
-  else if (strcmp("start_reply", fun) == 0) {
+  else if (strcmp("recvfrom", fun) == 0) {
     opt =  parse_args(argc, argv);
-    if(opt.key == 0) {
+    if(opt.bind == 0) {
       usage(argv[0]);
       exit(1);
+    } else {
+      start_recvfrom(opt.bind, opt.force);
     }
-    start_reply(opt.key);
+    
   }
   else if (strcmp("start_net_client", fun) == 0) {
     opt =  parse_args(argc, argv);

--
Gitblit v1.8.0