fix bind_addr logic
parent
22cbb30e29
commit
092f253ff2
|
|
@ -221,7 +221,22 @@ 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 (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 {
|
||||||
|
return _socket_server(bind_addr, g_sf_global_vars.outer_port, &g_server_outer_sock);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ((result=_socket_server(g_sf_global_vars.outer_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)
|
||||||
{
|
{
|
||||||
|
|
@ -233,24 +248,6 @@ int sf_socket_server()
|
||||||
{
|
{
|
||||||
return result;
|
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 = "";
|
|
||||||
} else {
|
|
||||||
bind_addr = g_sf_global_vars.outer_bind_addr;
|
|
||||||
}
|
|
||||||
} 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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
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) {
|
||||||
|
if (g_server_inner_sock >= 0) {
|
||||||
_accept_loop(g_server_inner_sock, g_sf_global_vars.accept_threads);
|
_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)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue