--- lbbs/src/bbs_net.c 2025/05/10 14:37:04 1.30 +++ lbbs/src/bbs_net.c 2025/05/11 04:09:08 1.32 @@ -33,6 +33,7 @@ #include #include #include +#include #include #define MENU_CONF_DELIM " \t\r\n" @@ -157,7 +158,8 @@ int bbsnet_connect(int n) fd_set write_fds; struct timeval timeout; struct hostent *p_host = NULL; - int tos = 020, i; + int tos; + int i; char remote_addr[IP_ADDR_LEN]; int remote_port; time_t t_used; @@ -190,14 +192,13 @@ int bbsnet_connect(int n) } sin.sin_family = AF_INET; - sin.sin_addr.s_addr = - (strnlen(hostaddr_server, sizeof(hostaddr_server)) > 0 ? inet_addr(hostaddr_server) : INADDR_ANY); + sin.sin_addr.s_addr = (hostaddr_server[0] != '\0' ? inet_addr(hostaddr_server) : INADDR_ANY); sin.sin_port = 0; if (bind(sock, (struct sockaddr *)&sin, sizeof(sin)) < 0) { - log_error("Bind address %s:%u failed\n", - inet_ntoa(sin.sin_addr), ntohs(sin.sin_port)); + log_error("Bind address %s:%u failed (%d)\n", + inet_ntoa(sin.sin_addr), ntohs(sin.sin_port), errno); return -2; } @@ -279,7 +280,12 @@ int bbsnet_connect(int n) } fcntl(sock, F_SETFL, flags); /* restore file status flags */ - setsockopt(sock, IPPROTO_IP, IP_TOS, &tos, sizeof(int)); + + tos = IPTOS_LOWDELAY; + if (setsockopt(sock, IPPROTO_IP, IP_TOS, &tos, sizeof(tos)) < 0) + { + log_error("setsockopt IP_TOS=%d error (%d)\n", tos, errno); + } prints("\033[1;31mÁ¬½Ó³É¹¦£¡\033[m\r\n"); log_std("BBSNET connect to %s:%d\n", remote_addr, remote_port); @@ -297,7 +303,7 @@ int bbsnet_connect(int n) timeout.tv_sec = 0; timeout.tv_usec = 100 * 1000; // 0.1 second - ret = select(FD_SETSIZE, &read_fds, NULL, NULL, &timeout); + ret = select(sock + 1, &read_fds, NULL, NULL, &timeout); if (ret == 0) // timeout {