stoddard 99/08/20 21:43:18
Modified: mpm/src/main listen.c mpm/src/modules/mpm/winnt winnt.c Log: Forgot listen.c in the earlier AcceptEx patch to winnt.c. Enable winnt mpm to detech OS at runtime. Revision Changes Path 1.5 +9 -0 apache-2.0/mpm/src/main/listen.c Index: listen.c =================================================================== RCS file: /home/cvs/apache-2.0/mpm/src/main/listen.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- listen.c 1999/07/26 07:03:09 1.4 +++ listen.c 1999/08/21 04:43:08 1.5 @@ -78,11 +78,20 @@ else ap_snprintf(addr, sizeof(addr), "port %d", ntohs(server->sin_port)); +#ifdef WIN32 + s = WSASocket(AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL, 0, WSA_FLAG_OVERLAPPED); + if (s == INVALID_SOCKET) { + ap_log_error(APLOG_MARK, APLOG_CRIT, NULL, + "make_sock: failed to get a socket for %s", addr); + return -1; + } +#else if ((s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1) { ap_log_error(APLOG_MARK, APLOG_CRIT, NULL, "make_sock: failed to get a socket for %s", addr); return -1; } +#endif #ifdef SO_REUSEADDR if (setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (char *) &one, sizeof(int)) < 0) { 1.10 +23 -13 apache-2.0/mpm/src/modules/mpm/winnt/winnt.c Index: winnt.c =================================================================== RCS file: /home/cvs/apache-2.0/mpm/src/modules/mpm/winnt/winnt.c,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- winnt.c 1999/08/20 20:20:33 1.9 +++ winnt.c 1999/08/21 04:43:15 1.10 @@ -94,6 +94,8 @@ static server_rec *server_conf; static int one_process = 0; + +static OSVERSIONINFO osver; /* VER_PLATFORM_WIN32_NT */ event *exit_event; mutex *start_mutex; int my_pid; @@ -767,12 +769,12 @@ ap_clear_pool(lpCompContext->ptrans); lpCompContext->conn_io = ap_bcreate(lpCompContext->ptrans, B_RDWR); + /* Grab a connection off the network */ + if (osver.dwPlatformId == VER_PLATFORM_WIN32_NT) + lpCompContext = winnt_get_connection(lpCompContext); + else + lpCompContext = win9x_get_connection(lpCompContext); -#ifdef QUEUED_ACCEPT - lpCompContext = win9x_get_connection(lpCompContext); -#else - lpCompContext = winnt_get_connection(lpCompContext); -#endif if (!lpCompContext) break; @@ -954,10 +956,9 @@ child_handles[i] = create_thread((void (*)(void *)) child_main, (void *) i); } -#ifdef QUEUED_ACCEPT - /* spawn off accept thread */ - create_thread((void (*)(void *)) accept_and_queue_connections, (void *) NULL); -#endif + /* spawn off accept thread (WIN9x only) */ + if (osver.dwPlatformId != VER_PLATFORM_WIN32_NT) + create_thread((void (*)(void *)) accept_and_queue_connections, (void *) NULL); rv = WaitForSingleObject(exit_event, INFINITE); printf("exit event signalled \n"); @@ -965,11 +966,17 @@ /* Get ready to shutdown and exit */ ap_release_mutex(start_mutex); -#ifdef QUEUED_ACCEPT - for (i = 0; i < nthreads; i++) { - add_job(-1); + + if (osver.dwPlatformId != VER_PLATFORM_WIN32_NT) { + /* This is only needed for platforms that use the accept queue code + * (WIN9x only). It should work on NT but not as efficiently as the + * code written specifically for Windows NT. + */ + for (i = 0; i < nthreads; i++) { + add_job(-1); + } } -#endif + /* Wait for all your children */ end_time = time(NULL) + 180; while (nthreads) { @@ -1359,6 +1366,9 @@ { char *pid; one_process=1;//!!getenv("ONE_PROCESS"); + + osver.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); + GetVersionEx(&osver); /* AP_PARENT_PID is only valid in the child */ pid = getenv("AP_PARENT_PID");