Return-Path: Delivered-To: apmail-httpd-cvs-archive@www.apache.org Received: (qmail 53668 invoked from network); 29 Jan 2004 03:20:17 -0000 Received: from daedalus.apache.org (HELO mail.apache.org) (208.185.179.12) by minotaur-2.apache.org with SMTP; 29 Jan 2004 03:20:17 -0000 Received: (qmail 52364 invoked by uid 500); 29 Jan 2004 03:19:58 -0000 Delivered-To: apmail-httpd-cvs-archive@httpd.apache.org Received: (qmail 52277 invoked by uid 500); 29 Jan 2004 03:19:57 -0000 Mailing-List: contact cvs-help@httpd.apache.org; run by ezmlm Precedence: bulk Reply-To: dev@httpd.apache.org list-help: list-unsubscribe: list-post: Delivered-To: mailing list cvs@httpd.apache.org Received: (qmail 52259 invoked by uid 500); 29 Jan 2004 03:19:57 -0000 Delivered-To: apmail-httpd-2.0-cvs@apache.org Received: (qmail 52255 invoked from network); 29 Jan 2004 03:19:57 -0000 Received: from unknown (HELO minotaur.apache.org) (209.237.227.194) by daedalus.apache.org with SMTP; 29 Jan 2004 03:19:57 -0000 Received: (qmail 53621 invoked by uid 1088); 29 Jan 2004 03:20:15 -0000 Date: 29 Jan 2004 03:20:15 -0000 Message-ID: <20040129032015.53619.qmail@minotaur.apache.org> From: stoddard@apache.org To: httpd-2.0-cvs@apache.org Subject: cvs commit: httpd-2.0/server/mpm/winnt child.c mpm_winnt.c mpm_winnt.h X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N X-Spam-Rating: minotaur-2.apache.org 1.6.2 0/1000/N stoddard 2004/01/28 19:20:15 Modified: . Tag: APACHE_2_0_BRANCH CHANGES STATUS server/mpm/winnt Tag: APACHE_2_0_BRANCH child.c mpm_winnt.c mpm_winnt.h Log: Win32: Port Win32DisableAcceptEx from 2.1 Revision Changes Path No revision No revision 1.988.2.221 +7 -0 httpd-2.0/CHANGES Index: CHANGES =================================================================== RCS file: /home/cvs/httpd-2.0/CHANGES,v retrieving revision 1.988.2.220 retrieving revision 1.988.2.221 diff -u -r1.988.2.220 -r1.988.2.221 --- CHANGES 28 Jan 2004 19:47:27 -0000 1.988.2.220 +++ CHANGES 29 Jan 2004 03:20:13 -0000 1.988.2.221 @@ -1,4 +1,11 @@ Changes with Apache 2.0.49 + *) Win32: Add Win32DisableAcceptEx directive. This Windows + NT/2000/CP directive is useful to work around bugs in some + third party layered service providers like virus scanners, + VPN and firewall products, that do not properly handle + WinSock 2 APIs. Use this directive if your server is issuing + AcceptEx failed messages. + [Allan Edwards, Bill Rowe, Bill Stoddard, Jeff Trawick] *) Make REMOTE_PORT variable available in mod_rewrite. PR 25772. [Andr� Malo] 1.751.2.654 +1 -10 httpd-2.0/STATUS Index: STATUS =================================================================== RCS file: /home/cvs/httpd-2.0/STATUS,v retrieving revision 1.751.2.653 retrieving revision 1.751.2.654 diff -u -r1.751.2.653 -r1.751.2.654 --- STATUS 28 Jan 2004 22:35:54 -0000 1.751.2.653 +++ STATUS 29 Jan 2004 03:20:14 -0000 1.751.2.654 @@ -113,15 +113,6 @@ http://cvs.apache.org/viewcvs.cgi/httpd-2.0/modules/proxy/proxy_http.c?r1=1.176&r2=1.177 +1: stoddard, nd - * Win32: Port Win32DisableAcceptEx directive. This fix enables using - Winsock 1.1 accept() call in place of Winsock 2.0 AcceptEx() to work - around bugs in third party layered service providers (e.g. virus - scanners) that do not properly handle various Winsock 2 APIs. - http://cvs.apache.org/viewcvs.cgi/httpd-2.0/server/mpm/winnt/child.c?r1=1.19&r2=1.20 - http://cvs.apache.org/viewcvs.cgi/httpd-2.0/server/mpm/winnt/mpm_winnt.c?r1=1.301&r2=1.302 - http://cvs.apache.org/viewcvs.cgi/httpd-2.0/server/mpm/winnt/mpm_winnt.h?r1=1.42&r2=1.43 - +1: stoddard, trawick (with subsequent change to messages), ake - * If large file support is enabled, allow any file that is greater than AP_MAX_SENDFILE to be split into multiple buckets. This allows Apache to send files that are greater than 2gig. Otherwise we run into No revision No revision 1.9.2.7 +17 -7 httpd-2.0/server/mpm/winnt/child.c Index: child.c =================================================================== RCS file: /home/cvs/httpd-2.0/server/mpm/winnt/child.c,v retrieving revision 1.9.2.6 retrieving revision 1.9.2.7 diff -u -r1.9.2.6 -r1.9.2.7 --- child.c 1 Jan 2004 13:30:45 -0000 1.9.2.6 +++ child.c 29 Jan 2004 03:20:14 -0000 1.9.2.7 @@ -709,11 +709,11 @@ ap_update_child_status_from_indexes(0, thread_num, SERVER_READY, NULL); /* Grab a connection off the network */ - if (osver.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) { - context = win9x_get_connection(context); + if (use_acceptex) { + context = winnt_get_connection(context); } else { - context = winnt_get_connection(context); + context = win9x_get_connection(context); } if (!context) { /* Time for the thread to exit */ @@ -741,6 +741,16 @@ context->accept_socket = INVALID_SOCKET; ap_lingering_close(c); } + else if (!use_acceptex) { + /* If the socket is disconnected but we are not using acceptex, + * we cannot reuse the socket. Disconnected sockets are removed + * from the apr_socket_t struct by apr_sendfile() to prevent the + * socket descriptor from being inadvertently closed by a call + * to apr_socket_close(), so close it directly. + */ + closesocket(context->accept_socket); + context->accept_socket = INVALID_SOCKET; + } } else { /* ap_run_create_connection closes the socket on failure */ @@ -777,7 +787,7 @@ static void create_listener_thread() { int tid; - if (osver.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) { + if (!use_acceptex) { _beginthreadex(NULL, 0, (LPTHREAD_START_ROUTINE) win9x_accept, NULL, 0, &tid); } else { @@ -1015,7 +1025,7 @@ } /* Shutdown the worker threads */ - if (osver.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) { + if (!use_acceptex) { for (i = 0; i < threads_created; i++) { add_job(INVALID_SOCKET); } @@ -1073,8 +1083,8 @@ CloseHandle(allowed_globals.jobsemaphore); apr_thread_mutex_destroy(allowed_globals.jobmutex); - if (osver.dwPlatformId != VER_PLATFORM_WIN32_WINDOWS) { - apr_thread_mutex_destroy(qlock); + if (use_acceptex) { + apr_thread_mutex_destroy(qlock); CloseHandle(qwait_event); } 1.296.2.4 +16 -0 httpd-2.0/server/mpm/winnt/mpm_winnt.c Index: mpm_winnt.c =================================================================== RCS file: /home/cvs/httpd-2.0/server/mpm/winnt/mpm_winnt.c,v retrieving revision 1.296.2.3 retrieving revision 1.296.2.4 diff -u -r1.296.2.3 -r1.296.2.4 --- mpm_winnt.c 1 Jan 2004 13:30:45 -0000 1.296.2.3 +++ mpm_winnt.c 29 Jan 2004 03:20:14 -0000 1.296.2.4 @@ -103,6 +103,7 @@ DWORD my_pid; int ap_threads_per_child = 0; +int use_acceptex = 1; static int thread_limit = DEFAULT_THREAD_LIMIT; static int first_thread_limit = 0; static int changed_limit_at_restart; @@ -217,6 +218,19 @@ } return NULL; } +static const char *set_disable_acceptex(cmd_parms *cmd, void *dummy, char *arg) +{ + const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY); + if (err != NULL) { + return err; + } + if (use_acceptex) { + use_acceptex = 0; + ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, NULL, + "Disabled use of AcceptEx() WinSock2 API"); + } + return NULL; +} static const command_rec winnt_cmds[] = { LISTEN_COMMANDS, @@ -224,6 +238,8 @@ "Number of threads each child creates" ), AP_INIT_TAKE1("ThreadLimit", set_thread_limit, NULL, RSRC_CONF, "Maximum worker threads in a server for this run of Apache"), +AP_INIT_NO_ARGS("Win32DisableAcceptEx", set_disable_acceptex, NULL, RSRC_CONF, + "Disable use of the high performance AcceptEx WinSock2 API to work around buggy VPN or Firewall software"), { NULL } }; 1.40.2.3 +1 -1 httpd-2.0/server/mpm/winnt/mpm_winnt.h Index: mpm_winnt.h =================================================================== RCS file: /home/cvs/httpd-2.0/server/mpm/winnt/mpm_winnt.h,v retrieving revision 1.40.2.2 retrieving revision 1.40.2.3 diff -u -r1.40.2.2 -r1.40.2.3 --- mpm_winnt.h 1 Jan 2004 13:30:45 -0000 1.40.2.2 +++ mpm_winnt.h 29 Jan 2004 03:20:14 -0000 1.40.2.3 @@ -100,7 +100,7 @@ void mpm_nt_eventlog_stderr_flush(void); /* From winnt.c: */ - +extern int use_acceptex; extern OSVERSIONINFO osver; extern void clean_child_exit(int);