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");
  
  
  

Reply via email to