diff --git a/dap-sdk/net/core/dap_server.c b/dap-sdk/net/core/dap_server.c index dd199b333ba93de547e37584e4b2684bb0ce1b0d..f50290948436b444260c62a2e1b59e6b9dad0ad4 100644 --- a/dap-sdk/net/core/dap_server.c +++ b/dap-sdk/net/core/dap_server.c @@ -66,6 +66,7 @@ #include "dap_common.h" #include "dap_server.h" +#include "dap_strfuncs.h" #define LOG_TAG "server" @@ -740,8 +741,6 @@ int32_t dap_server_loop( dap_server_t *d_server ) static uint32_t pickthread = 0; // just for test pthread_t thread_listener[ DAP_MAX_THREADS ]; - if ( !d_server ) return 1; - for( uint32_t i = 0; i < _count_threads; ++i ) { EPOLL_HANDLE efd = epoll_create1( 0 ); @@ -767,49 +766,55 @@ int32_t dap_server_loop( dap_server_t *d_server ) struct epoll_event pev; struct epoll_event events[ 16 ]; - memset(&pev, 0, sizeof(pev)); - pev.events = EPOLLIN | EPOLLERR; - pev.data.fd = d_server->socket_listener; + if(d_server){ + memset(&pev, 0, sizeof(pev)); + pev.events = EPOLLIN | EPOLLERR; + pev.data.fd = d_server->socket_listener; - if( epoll_ctl( efd, EPOLL_CTL_ADD, d_server->socket_listener, &pev) != 0 ) { - log_it( L_ERROR, "epoll_ctl failed 004" ); - goto error; + if( epoll_ctl( efd, EPOLL_CTL_ADD, d_server->socket_listener, &pev) != 0 ) { + log_it( L_ERROR, "epoll_ctl failed 004" ); + goto error; + } } while( !bQuitSignal ) { + if(d_server){ + int32_t n = epoll_wait( efd, &events[0], 16, -1 ); - int32_t n = epoll_wait( efd, &events[0], 16, -1 ); + if ( bQuitSignal ) + break; - if ( bQuitSignal ) - break; + if ( n <= 0 ) { + if ( errno == EINTR ) + continue; + log_it( L_ERROR, "Server wakeup no events / error" ); + break; + } - if ( n <= 0 ) { - if ( errno == EINTR ) - continue; - log_it( L_ERROR, "Server wakeup no events / error" ); - break; - } + for( int32_t i = 0; i < n; ++ i ) { - for( int32_t i = 0; i < n; ++ i ) { + if ( events[i].events & EPOLLIN ) { - if ( events[i].events & EPOLLIN ) { + int client_fd = accept( events[i].data.fd, 0, 0 ); - int client_fd = accept( events[i].data.fd, 0, 0 ); + if ( client_fd < 0 ) { + log_it( L_ERROR, "accept_cb: error accept socket"); + continue; + } - if ( client_fd < 0 ) { - log_it( L_ERROR, "accept_cb: error accept socket"); - continue; + set_nonblock_socket( client_fd ); + dap_server_add_socket( client_fd, -1 ); + } + else if( events[i].events & EPOLLERR ) { + log_it( L_ERROR, "Server socket error event" ); + goto exit; } - set_nonblock_socket( client_fd ); - dap_server_add_socket( client_fd, -1 ); - } - else if( events[i].events & EPOLLERR ) { - log_it( L_ERROR, "Server socket error event" ); - goto exit; - } - - } // for + } // for + }else{ + static const int c_dap_server_client_mode_tick_rate = 200; + dap_usleep(DAP_USEC_PER_SEC / c_dap_server_client_mode_tick_rate); + } } // while