From 554529bb69cd610e83db2c9a80b4f36f5225d80f Mon Sep 17 00:00:00 2001
From: wangzhengquan <wangzhengquan85@126.com>
Date: 星期一, 27 七月 2020 17:56:34 +0800
Subject: [PATCH] restart bus

---
 src/socket/shm_socket.c |   17 +++++++++++++----
 1 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/src/socket/shm_socket.c b/src/socket/shm_socket.c
index 52251e6..168eb65 100644
--- a/src/socket/shm_socket.c
+++ b/src/socket/shm_socket.c
@@ -23,6 +23,7 @@
   shm_socket_t *socket = (shm_socket_t *)calloc(1, sizeof(shm_socket_t));
   socket->socket_type = socket_type;
   socket->port = -1;
+  socket->force_bind = false;
   socket->dispatch_thread = 0;
   socket->status = SHM_CONN_CLOSED;
 
@@ -46,6 +47,12 @@
   return 0;
 }
 
+int shm_socket_force_bind(shm_socket_t *socket, int port) {
+  socket->force_bind = true;
+  socket->port = port;
+  return 0;
+}
+
 int shm_listen(shm_socket_t *socket) {
 
   if (socket->socket_type != SHM_SOCKET_STREAM) {
@@ -60,7 +67,7 @@
     socket->port = port;
   } else {
 
-    if (hashtable_get(hashtable, socket->port) != NULL) {
+    if (hashtable_get(hashtable, socket->port) != NULL && !socket->force_bind) {
       err_exit(0, "key %d has already been in used!", socket->port);
     }
   }
@@ -144,7 +151,7 @@
     socket->port = hashtable_alloc_key(hashtable);
   } else {
 
-    if (hashtable_get(hashtable, socket->port) != NULL) {
+    if (hashtable_get(hashtable, socket->port) != NULL && !socket->force_bind ) {
       err_exit(0, "key %d has already been in used!", socket->port);
     }
   }
@@ -243,7 +250,8 @@
     } else {
 
       if (hashtable_get(hashtable, socket->port) != NULL) {
-        err_exit(0, "key %d has already been in used!", socket->port);
+        if(!socket->force_bind)
+          err_exit(0, "key %d has already been in used!", socket->port);
       }
     }
 
@@ -299,7 +307,8 @@
     } else {
 
       if (hashtable_get(hashtable, socket->port) != NULL) {
-        err_exit(0, "key %d has already been in used!", socket->port);
+        if(!socket->force_bind)
+          err_exit(0, "key %d has already been in used!", socket->port);
       }
     }
 

--
Gitblit v1.8.0