From 91d16199d2c974d311ce6f411ddd5c3ee667b222 Mon Sep 17 00:00:00 2001 From: rswindell <> Date: Wed, 15 Nov 2000 01:28:46 +0000 Subject: [PATCH] Now uses select before accept (allows detection of closed server socket on Unix). --- src/sbbs3/ftpsrvr.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/sbbs3/ftpsrvr.c b/src/sbbs3/ftpsrvr.c index cf39dd5113..ede5eb5a23 100644 --- a/src/sbbs3/ftpsrvr.c +++ b/src/sbbs3/ftpsrvr.c @@ -2939,7 +2939,10 @@ void DLLCALL ftp_server(void* arg) time_t t; time_t start; LINGER linger; + fd_set socket_set; + SOCKET high_socket_set; ftp_t* ftp; + struct timeval tv; startup=(ftp_startup_t*)arg; @@ -3099,6 +3102,27 @@ void DLLCALL ftp_server(void* arg) /* now wait for connection */ + tv.tv_sec=2; + tv.tv_usec=0; + + FD_ZERO(&socket_set); + FD_SET(server_socket,&socket_set); + high_socket_set=server_socket+1; + + if((i=select(high_socket_set,&socket_set,NULL,NULL,&tv))<1) { + if(i==0) { + mswait(1); + continue; + } + if(ERROR_VALUE==EINTR) + lprintf("0000 FTP Server listening interrupted"); + else if(ERROR_VALUE == ENOTSOCK) + lprintf("0000 FTP Server sockets closed"); + else + lprintf("0000 !ERROR %d selecting sockets",ERROR_VALUE); + break; + } + client_addr_len = sizeof(client_addr); client_socket = accept(server_socket, (struct sockaddr *)&client_addr ,&client_addr_len); -- GitLab