diff --git a/dap_chain_net_srv_vpn.c b/dap_chain_net_srv_vpn.c index a88c6a966f22008bd173ab2cccaef95f33a22bd5..993ceee5a5b49a394c2befde17d343a8d5a0e9aa 100755 --- a/dap_chain_net_srv_vpn.c +++ b/dap_chain_net_srv_vpn.c @@ -1264,6 +1264,14 @@ void * srv_ch_sf_thread(void * arg) } } +static volatile bool s_srv_ch_sf_thread_raw_is_exit = false; + +/* Signal handler. */ +static void s_sig_handle (int sig) +{ + s_srv_ch_sf_thread_raw_is_exit = true; +} + /** * * @@ -1298,6 +1306,11 @@ void* srv_ch_sf_thread_raw(void *arg) log_it(L_INFO, "Tun/tap thread starts with MTU = %d", tun_MTU); fd_set fds_read, fds_read_active; + sigset_t l_sig_mask_proc; + sigset_t l_sig_mask_orig; + sigemptyset (&l_sig_mask_proc); + sigaddset (&l_sig_mask_proc, SIGTERM); + FD_ZERO(&fds_read); FD_SET(s_raw_server->tun_fd, &fds_read); @@ -1369,10 +1382,10 @@ void* srv_ch_sf_thread_raw(void *arg) }*/ } else { - log_it(L_CRITICAL, "Select returned %d", ret); - break; + log_it(L_WARNING, "Select returned %d: %s", ret, strerror(errno)); + //break; } - } while(1); + } while(! s_srv_ch_sf_thread_raw_is_exit ); log_it(L_NOTICE, "Raw sockets listen thread is stopped"); s_tun_destroy(); return NULL;