From e1b1fb4eb197a157809d6b6f4b0cfd8aa03bba60 Mon Sep 17 00:00:00 2001
From: wangzhengquan <wangzhengquan85@126.com>
Date: 星期三, 29 七月 2020 17:45:59 +0800
Subject: [PATCH] rm .idea
---
src/socket/shm_socket.c | 18 +++++++++++++-----
1 files changed, 13 insertions(+), 5 deletions(-)
diff --git a/src/socket/shm_socket.c b/src/socket/shm_socket.c
index 9d54986..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);
}
}
@@ -483,7 +492,6 @@
delete client_socket->messageQueue;
client_socket->messageQueue = NULL;
- socket->clientSocketMap->erase(iter);
free((void *)client_socket);
}
delete socket->clientSocketMap;
--
Gitblit v1.8.0