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 result;
if (g_sf_global_vars.outer_port != g_sf_global_vars.inner_port) {
if ((result=_socket_server(g_sf_global_vars.outer_bind_addr, g_sf_global_vars.outer_port,
&g_server_outer_sock)) != 0)
{
return result;
}
const char *bind_addr;
if ((result=_socket_server(g_sf_global_vars.inner_bind_addr, g_sf_global_vars.inner_port,
&g_server_inner_sock)) != 0)
{
return result;
}
} else {
const char *bind_addr;
if (*g_sf_global_vars.outer_bind_addr != '\0') {
if (*g_sf_global_vars.inner_bind_addr != '\0') {
bind_addr = "";
if (g_sf_global_vars.outer_port == g_sf_global_vars.inner_port) {
if (*g_sf_global_vars.outer_bind_addr == '\0' || *g_sf_global_vars.inner_bind_addr == '\0') {
bind_addr = "";
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) {
bind_addr = g_sf_global_vars.outer_bind_addr;
if (is_private_ip(bind_addr)) {
return _socket_server(bind_addr, g_sf_global_vars.inner_port, &g_server_inner_sock);
} 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,
&g_server_outer_sock)) != 0)
{
return result;
}
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,
&g_server_inner_sock)) != 0)
{
return result;
}
return 0;
@ -327,6 +324,10 @@ void _accept_loop(int server_sock, const int accept_threads)
int result;
int i;
if (accept_threads <= 0) {
return;
}
if ((result=init_pthread_attr(&thread_attr, g_sf_global_vars.thread_stack_size)) != 0) {
logWarning("file: "__FILE__", line: %d, "
"init_pthread_attr fail!", __LINE__);
@ -351,12 +352,17 @@ void _accept_loop(int server_sock, const int accept_threads)
void sf_accept_loop()
{
if (g_sf_global_vars.outer_port != g_sf_global_vars.inner_port) {
_accept_loop(g_server_inner_sock, g_sf_global_vars.accept_threads);
}
if (g_server_outer_sock >= 0) {
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_thread_entrance((void *)(long)g_server_outer_sock);
_accept_loop(g_server_outer_sock, g_sf_global_vars.accept_threads - 1);
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)