Skip to content
Snippets Groups Projects
ftpsrvr.c 142 KiB
Newer Older
			if(trashcan(&scfg,inet_ntoa(client_addr.sin_addr),"ip-silent")) {
				ftp_close_socket(&client_socket,__LINE__);
				continue;
			}

			if(active_clients>=startup->max_clients) {
runderwo's avatar
 
runderwo committed
				lprintf(LOG_WARNING,"%04d !MAXIMUM CLIENTS (%d) reached, access denied"
					,client_socket, startup->max_clients);
				sockprintf(client_socket,"421 Maximum active clients reached, please try again later.");
				mswait(3000);
				ftp_close_socket(&client_socket,__LINE__);
				continue;
			}
			if((ftp=malloc(sizeof(ftp_t)))==NULL) {
				lprintf(LOG_CRIT,"%04d !ERROR allocating %d bytes of memory for ftp_t"
					,client_socket,sizeof(ftp_t));
				sockprintf(client_socket,"421 System error, please try again later.");
				mswait(3000);
				ftp_close_socket(&client_socket,__LINE__);
				continue;
			}
			ftp->socket=client_socket;
			ftp->client_addr=client_addr;
			_beginthread (ctrl_thread, 0, ftp);
#if 0 /* def _DEBUG */
		lprintf(LOG_DEBUG,"0000 server_socket: %d",server_socket);
		lprintf(LOG_DEBUG,"0000 terminate_server: %d",terminate_server);
#endif
			lprintf(LOG_DEBUG,"%04d Waiting for %d active clients to disconnect..."
				,server_socket, active_clients);
			start=time(NULL);
			while(active_clients) {
				if(time(NULL)-start>startup->max_inactivity) {
					lprintf(LOG_WARNING,"%04d !TIMEOUT waiting for %d active clients"
						,server_socket, active_clients);
			lprintf(LOG_DEBUG,"%04d Waiting for %d threads to terminate..."
				,server_socket, thread_count-1);
			start=time(NULL);
			while(thread_count>1) {
				if(time(NULL)-start>TIMEOUT_THREAD_WAIT) {
					lprintf(LOG_WARNING,"%04d !TIMEOUT waiting for %d threads"
						,server_socket, thread_count-1);
rswindell's avatar
rswindell committed
		cleanup(0,__LINE__);
			lprintf(LOG_INFO,"Recycling server...");
			mswait(2000);
			if(startup->recycle!=NULL)
				startup->recycle(startup->cbdata);