fix bind_addr logic

connection_manager
YuQing 2019-09-23 19:49:57 +08:00
parent 22cbb30e29
commit 092f253ff2
1 changed files with 35 additions and 29 deletions

View File

@ -221,35 +221,32 @@ static int _socket_server(const char *bind_addr, int port, int *sock)
int sf_socket_server() int sf_socket_server()
{ {
int result; int result;
if (g_sf_global_vars.outer_port != g_sf_global_vars.inner_port) { const char *bind_addr;
if ((result=_socket_server(g_sf_global_vars.outer_bind_addr, g_sf_global_vars.outer_port,
&g_server_outer_sock)) != 0)
{
return result;
}
if ((result=_socket_server(g_sf_global_vars.inner_bind_addr, g_sf_global_vars.inner_port, if (g_sf_global_vars.outer_port == g_sf_global_vars.inner_port) {
&g_server_inner_sock)) != 0) if (*g_sf_global_vars.outer_bind_addr == '\0' || *g_sf_global_vars.inner_bind_addr == '\0') {
{ bind_addr = "";
return result; return _socket_server(bind_addr, g_sf_global_vars.outer_port, &g_server_outer_sock);
} } else if (strcmp(g_sf_global_vars.outer_bind_addr, g_sf_global_vars.inner_bind_addr) == 0) {
} else { bind_addr = g_sf_global_vars.outer_bind_addr;
const char *bind_addr; if (is_private_ip(bind_addr)) {
if (*g_sf_global_vars.outer_bind_addr != '\0') { return _socket_server(bind_addr, g_sf_global_vars.inner_port, &g_server_inner_sock);
if (*g_sf_global_vars.inner_bind_addr != '\0') {
bind_addr = "";
} else { } else {
bind_addr = g_sf_global_vars.outer_bind_addr; return _socket_server(bind_addr, g_sf_global_vars.outer_port, &g_server_outer_sock);
} }
} else {
bind_addr = g_sf_global_vars.inner_bind_addr;
} }
}
if ((result=_socket_server(bind_addr, g_sf_global_vars.outer_port, if ((result=_socket_server(g_sf_global_vars.outer_bind_addr, g_sf_global_vars.outer_port,
&g_server_outer_sock)) != 0) &g_server_outer_sock)) != 0)
{ {
return result; return result;
} }
if ((result=_socket_server(g_sf_global_vars.inner_bind_addr, g_sf_global_vars.inner_port,
&g_server_inner_sock)) != 0)
{
return result;
} }
return 0; return 0;
@ -327,6 +324,10 @@ void _accept_loop(int server_sock, const int accept_threads)
int result; int result;
int i; int i;
if (accept_threads <= 0) {
return;
}
if ((result=init_pthread_attr(&thread_attr, g_sf_global_vars.thread_stack_size)) != 0) { if ((result=init_pthread_attr(&thread_attr, g_sf_global_vars.thread_stack_size)) != 0) {
logWarning("file: "__FILE__", line: %d, " logWarning("file: "__FILE__", line: %d, "
"init_pthread_attr fail!", __LINE__); "init_pthread_attr fail!", __LINE__);
@ -351,12 +352,17 @@ void _accept_loop(int server_sock, const int accept_threads)
void sf_accept_loop() void sf_accept_loop()
{ {
if (g_sf_global_vars.outer_port != g_sf_global_vars.inner_port) { if (g_server_outer_sock >= 0) {
_accept_loop(g_server_inner_sock, g_sf_global_vars.accept_threads); if (g_server_inner_sock >= 0) {
} _accept_loop(g_server_inner_sock, g_sf_global_vars.accept_threads);
}
_accept_loop(g_server_outer_sock, g_sf_global_vars.accept_threads - 1); _accept_loop(g_server_outer_sock, g_sf_global_vars.accept_threads - 1);
accept_thread_entrance((void *)(long)g_server_outer_sock); accept_thread_entrance((void *)(long)g_server_outer_sock);
} else {
_accept_loop(g_server_inner_sock, g_sf_global_vars.accept_threads - 1);
accept_thread_entrance((void *)(long)g_server_inner_sock);
}
} }
#if defined(DEBUG_FLAG) #if defined(DEBUG_FLAG)