--- lbbs/src/net_server.c 2025/05/12 03:54:14 1.25 +++ lbbs/src/net_server.c 2025/05/13 02:20:52 1.29 @@ -36,8 +36,6 @@ #include #include -#define MAX_EVENTS 10 - int net_server(const char *hostaddr, in_port_t port) { unsigned int namelen; @@ -55,7 +53,7 @@ int net_server(const char *hostaddr, in_ if (socket_server < 0) { log_error("Create socket failed\n"); - exit(1); + return -1; } sin.sin_family = AF_INET; @@ -77,13 +75,13 @@ int net_server(const char *hostaddr, in_ { log_error("Bind address %s:%u failed (%d)\n", inet_ntoa(sin.sin_addr), ntohs(sin.sin_port), errno); - exit(2); + return -1; } if (listen(socket_server, 10) < 0) { log_error("Socket listen failed (%d)\n", errno); - exit(3); + return -1; } strncpy(hostaddr_server, inet_ntoa(sin.sin_addr), sizeof(hostaddr_server) - 1); @@ -188,16 +186,24 @@ int net_server(const char *hostaddr, in_ { if (events[i].data.fd == socket_server) { - while (1) // Accept all incoming connections until error + while (!SYS_server_exit) // Accept all incoming connections until error { socket_client = accept(socket_server, (struct sockaddr *)&sin, &namelen); if (socket_client < 0) { - if (errno != EAGAIN && errno != EWOULDBLOCK && errno != ECONNABORTED && errno != EINTR) + if (errno == EAGAIN || errno == EWOULDBLOCK) + { + break; + } + else if (errno == EINTR) + { + continue; + } + else { log_error("accept(socket_server) error (%d)\n", errno); + break; } - break; } strncpy(hostaddr_client, inet_ntoa(sin.sin_addr), sizeof(hostaddr_client) - 1);