nginx-0.0.2-2004-03-04-10:04:55 import
diff --git a/src/os/win32/ngx_errno.h b/src/os/win32/ngx_errno.h
index 179cbbc..a7acf53 100644
--- a/src/os/win32/ngx_errno.h
+++ b/src/os/win32/ngx_errno.h
@@ -17,10 +17,13 @@
 #define NGX_EACCES                 ERROR_ACCESS_DENIED
 #define NGX_EEXIST                 ERROR_FILE_EXISTS
 #define NGX_ENOTDIR                ERROR_PATH_NOT_FOUND
+#define NGX_EPIPE                  EPIPE
 #define NGX_EAGAIN                 WSAEWOULDBLOCK
 #define NGX_EINPROGRESS            WSAEINPROGRESS
 #define NGX_EADDRINUSE             WSAEADDRINUSE
-#define NGX_ECONNRESET             ECONNRESET
+#define NGX_ECONNABORTED           WSAECONNABORTED
+#define NGX_ECONNRESET             WSAECONNRESET
+#define NGX_ENOTCONN               WSAENOTCONN
 #define NGX_ETIMEDOUT              WSAETIMEDOUT
 #define NGX_ENOMOREFILES           ERROR_NO_MORE_FILES
 
diff --git a/src/os/win32/ngx_files.h b/src/os/win32/ngx_files.h
index 1268d47..1b13f4c 100644
--- a/src/os/win32/ngx_files.h
+++ b/src/os/win32/ngx_files.h
@@ -21,8 +21,6 @@
 #define NGX_FILE_ERROR              0
 
 
-#define STDERR_FILENO               (HANDLE) 2
-
 
 #define ngx_open_file(name, access, create)                                 \
             CreateFile(name, access,                                        \
diff --git a/src/os/win32/ngx_os.h b/src/os/win32/ngx_os.h
index 212d57f..39af212 100644
--- a/src/os/win32/ngx_os.h
+++ b/src/os/win32/ngx_os.h
@@ -46,8 +46,13 @@
 extern int          ngx_win32_version;
 
 
-extern int          reconfigure;
-extern int          reopen;
+extern ngx_int_t    ngx_process;
+
+extern ngx_int_t    ngx_quit;
+extern ngx_int_t    ngx_terminate;
+
+extern ngx_int_t    ngx_reconfigure;
+extern ngx_int_t    ngx_reopen;
 
 
 
diff --git a/src/os/win32/ngx_process.c b/src/os/win32/ngx_process.c
new file mode 100644
index 0000000..e3a2786
--- /dev/null
+++ b/src/os/win32/ngx_process.c
@@ -0,0 +1,9 @@
+
+#include <ngx_config.h>
+#include <ngx_core.h>
+
+
+ngx_pid_t ngx_exec(ngx_cycle_t *cycle, ngx_exec_ctx_t *ctx)
+{
+    return /* STUB */ 0;
+}
diff --git a/src/os/win32/ngx_process.h b/src/os/win32/ngx_process.h
index a4d4bbc..35d9bb9 100644
--- a/src/os/win32/ngx_process.h
+++ b/src/os/win32/ngx_process.h
@@ -2,7 +2,29 @@
 #define _NGX_PROCESS_H_INCLUDED_
 
 
-#define ngx_getpid  GetCurrentProcessId
+typedef DWORD        ngx_pid_t;
+
+#define ngx_getpid   GetCurrentProcessId
+#define ngx_log_pid  ngx_pid
+
+
+typedef struct {
+    char         *path;
+    char         *name;
+    char *const  *argv;
+    char *const  *envp;
+} ngx_exec_ctx_t;
+
+
+#define NGX_PROCESS_SINGLE   0
+#define NGX_PROCESS_MASTER   1
+#define NGX_PROCESS_WORKER   2
+
+
+ngx_pid_t ngx_exec(ngx_cycle_t *cycle, ngx_exec_ctx_t *ctx);
+
+
+extern ngx_pid_t     ngx_pid;
 
 
 #endif /* _NGX_PROCESS_H_INCLUDED_ */
diff --git a/src/os/win32/ngx_process_cycle.c b/src/os/win32/ngx_process_cycle.c
new file mode 100644
index 0000000..8ffef52
--- /dev/null
+++ b/src/os/win32/ngx_process_cycle.c
@@ -0,0 +1,28 @@
+
+#include <ngx_config.h>
+#include <ngx_core.h>
+#include <ngx_event.h>
+
+
+#if 0
+
+ngx_int_t     ngx_process;
+ngx_pid_t     ngx_pid;
+ngx_pid_t     ngx_new_binary;
+ngx_int_t     ngx_inherited;
+
+sig_atomic_t  ngx_reap;
+sig_atomic_t  ngx_timer;
+sig_atomic_t  ngx_terminate;
+sig_atomic_t  ngx_quit;
+sig_atomic_t  ngx_noaccept;
+sig_atomic_t  ngx_reconfigure;
+sig_atomic_t  ngx_reopen;
+sig_atomic_t  ngx_change_binary;
+
+#endif
+
+
+void ngx_master_process_cycle(ngx_cycle_t *cycle, ngx_master_ctx_t *ctx)
+{
+}
diff --git a/src/os/win32/ngx_process_cycle.h b/src/os/win32/ngx_process_cycle.h
new file mode 100644
index 0000000..c863b62
--- /dev/null
+++ b/src/os/win32/ngx_process_cycle.h
@@ -0,0 +1,40 @@
+#ifndef _NGX_PROCESS_CYCLE_H_INCLUDED_
+#define _NGX_PROCESS_CYCLE_H_INCLUDED_
+
+
+#include <ngx_config.h>
+#include <ngx_core.h>
+
+
+typedef struct {
+     ngx_file_t    pid;
+     char         *name;
+     int           argc;
+     char *const  *argv;
+} ngx_master_ctx_t;
+
+
+#define NGX_PROCESS_SINGLE   0
+#define NGX_PROCESS_MASTER   1
+#define NGX_PROCESS_WORKER   2
+
+
+void ngx_master_process_cycle(ngx_cycle_t *cycle, ngx_master_ctx_t *ctx);
+
+
+extern ngx_int_t       ngx_process;
+extern ngx_pid_t       ngx_pid;
+extern ngx_pid_t       ngx_new_binary;
+extern ngx_int_t       ngx_inherited;
+
+extern sig_atomic_t    ngx_reap;
+extern sig_atomic_t    ngx_timer;
+extern sig_atomic_t    ngx_quit;
+extern sig_atomic_t    ngx_terminate;
+extern sig_atomic_t    ngx_noaccept;
+extern sig_atomic_t    ngx_reconfigure;
+extern sig_atomic_t    ngx_reopen;
+extern sig_atomic_t    ngx_change_binary;
+
+
+#endif /* _NGX_PROCESS_CYCLE_H_INCLUDED_ */
diff --git a/src/os/win32/ngx_thread.h b/src/os/win32/ngx_thread.h
new file mode 100644
index 0000000..cb282fb
--- /dev/null
+++ b/src/os/win32/ngx_thread.h
@@ -0,0 +1,26 @@
+#ifndef _NGX_THREAD_H_INCLUDED_
+#define _NGX_THREAD_H_INCLUDED_
+
+
+#include <ngx_config.h>
+#include <ngx_core.h>
+
+
+#if (NGX_THREADS)
+
+#define ngx_thread_volatile  volatile
+
+#else /* !NGX_THREADS */
+
+#define ngx_thread_volatile
+
+#define ngx_log_tid  0
+#define TID_T_FMT    "%d"
+
+#define ngx_mutex_lock(m)     NGX_OK
+#define ngx_mutex_unlock(m)
+
+#endif
+
+
+#endif /* _NGX_THREAD_H_INCLUDED_ */
diff --git a/src/os/win32/ngx_user.h b/src/os/win32/ngx_user.h
new file mode 100644
index 0000000..480a258
--- /dev/null
+++ b/src/os/win32/ngx_user.h
@@ -0,0 +1,14 @@
+#ifndef _NGX_USER_H_INCLUDED_
+#define _NGX_USER_H_INCLUDED_
+
+
+#include <ngx_config.h>
+#include <ngx_core.h>
+
+
+/* STUB */
+#define ngx_uid_t  ngx_int_t
+#define ngx_gid_t  ngx_int_t
+
+
+#endif /* _NGX_USER_H_INCLUDED_ */
diff --git a/src/os/win32/ngx_win32_config.h b/src/os/win32/ngx_win32_config.h
index 7b1fd13..00f6426 100644
--- a/src/os/win32/ngx_win32_config.h
+++ b/src/os/win32/ngx_win32_config.h
@@ -4,8 +4,6 @@
 
 #define WIN32       1
 
-#define NGX_WIN_NT  200000
-
 #define STRICT
 #define WIN32_LEAN_AND_MEAN
 
@@ -36,16 +34,19 @@
 #pragma warning(disable:4127)
 #endif
 
+#include <ngx_auto_config.h>
+
 
 #define ngx_inline   __inline
 
 
-#if 0
-/* owc have not __int32 */
+#if 1
 typedef unsigned __int32  uint32_t;
 #else
+/* OWC has not __int32 */
 typedef unsigned int      uint32_t;
 #endif
+
 typedef __int64           int64_t;
 typedef unsigned __int64  uint64_t;
 typedef u_int             uintptr_t;
@@ -54,6 +55,7 @@
 typedef long              time_t;
 typedef __int64           off_t;
 typedef uint32_t          in_addr_t;
+typedef int               sig_atomic_t;
 
 
 #define OFF_T_FMT         "%I64d"
@@ -61,8 +63,11 @@
 #define SIZE_T_X_FMT      "%x"
 #define PID_T_FMT         "%d"
 #define TIME_T_FMT        "%lu"
+#define PTR_FMT           "%08X"
 
 
+#define NGX_WIN_NT        200000
+
 
 #ifndef HAVE_INHERITED_NONBLOCK
 #define HAVE_INHERITED_NONBLOCK  1
diff --git a/src/os/win32/ngx_wsarecv.c b/src/os/win32/ngx_wsarecv.c
index 2a43498..96fa0ff 100644
--- a/src/os/win32/ngx_wsarecv.c
+++ b/src/os/win32/ngx_wsarecv.c
@@ -20,7 +20,8 @@
 
     rc = WSARecv(c->fd, wsabuf, 1, &bytes, &flags, NULL, NULL);
 
-    ngx_log_debug(c->log, "WSARecv: %d:%d" _ rc _ bytes);
+    ngx_log_debug4(NGX_LOG_DEBUG_EVENT, c->log, 0,
+                   "WSARecv: fd:%d rc:%d %d of %d", c->fd, rc, bytes, size);
 
     rev = c->read;
 
@@ -29,12 +30,14 @@
         err = ngx_socket_errno;
 
         if (err == WSAEWOULDBLOCK) {
-            ngx_log_error(NGX_LOG_INFO, c->log, err, "WSARecv() EAGAIN");
+            ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, err,
+                           "WSARecv() not ready");
             return NGX_AGAIN;
         }
 
         rev->error = 1;
-        ngx_log_error(NGX_LOG_CRIT, c->log, err, "WSARecv() failed");
+        ngx_connection_error(c, err, "WSARecv() failed");
+
         return NGX_ERROR;
     }
 
@@ -63,19 +66,19 @@
     rev = c->read;
 
     if (!rev->ready) {
-        ngx_log_error(NGX_LOG_ALERT, rev->log, 0, "SECOND WSA POST");
+        ngx_log_error(NGX_LOG_ALERT, rev->log, 0, "second wsa post");
         return NGX_AGAIN;
     }
 
-    ngx_log_debug(c->log, "rev->complete: %d" _ rev->complete);
+    ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0,
+                   "rev->complete: %d", rev->complete);
 
     if (rev->complete) {
         rev->complete = 0;
 
         if (ngx_event_flags & NGX_USE_IOCP_EVENT) {
             if (rev->ovlp.error) {
-                ngx_log_error(NGX_LOG_ERR, c->log, rev->ovlp.error,
-                              "WSARecv() failed");
+                ngx_connection_error(c, rev->ovlp.error, "WSARecv() failed");
                 return NGX_ERROR;
             }
 
@@ -84,9 +87,8 @@
 
         if (WSAGetOverlappedResult(c->fd, (LPWSAOVERLAPPED) &rev->ovlp,
                                    &bytes, 0, NULL) == 0) {
-            ngx_log_error(NGX_LOG_CRIT, c->log, ngx_socket_errno,
-                         "WSARecv() or WSAGetOverlappedResult() failed");
-
+            ngx_connection_error(c, ngx_socket_errno,
+                               "WSARecv() or WSAGetOverlappedResult() failed");
             return NGX_ERROR;
         }
 
@@ -104,7 +106,8 @@
 
     rev->complete = 0;
 
-    ngx_log_debug(c->log, "WSARecv: %d:%d" _ rc _ bytes);
+    ngx_log_debug4(NGX_LOG_DEBUG_EVENT, c->log, 0,
+                   "WSARecv: fd:%d rc:%d %d of %d", c->fd, rc, bytes, size);
 
     if (rc == -1) {
         err = ngx_socket_errno;
@@ -114,7 +117,7 @@
         }
 
         rev->error = 1;
-        ngx_log_error(NGX_LOG_CRIT, c->log, err, "WSARecv() failed");
+        ngx_connection_error(c, err, "WSARecv() failed");
         return NGX_ERROR;
     }
 
diff --git a/src/os/win32/ngx_wsarecv_chain.c b/src/os/win32/ngx_wsarecv_chain.c
index edc4421..afdfa05 100644
--- a/src/os/win32/ngx_wsarecv_chain.c
+++ b/src/os/win32/ngx_wsarecv_chain.c
@@ -40,7 +40,9 @@
         chain = chain->next;
     }
 
-ngx_log_debug(c->log, "WSARecv: %d:%d" _ io.nelts _ wsabuf->len);
+    ngx_log_debug2(NGX_LOG_DEBUG_EVENT, c->log, 0,
+                   "WSARecv: %d:%d", io.nelts, wsabuf->len);
+
 
     rc = WSARecv(c->fd, io.elts, io.nelts, &bytes, &flags, NULL, NULL);
 
@@ -51,12 +53,13 @@
         err = ngx_socket_errno;
 
         if (err == WSAEWOULDBLOCK) {
-            ngx_log_error(NGX_LOG_INFO, c->log, err, "WSARecv() EAGAIN");
+            ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, err,
+                           "WSARecv() not ready");
             return NGX_AGAIN;
         }
 
         rev->error = 1;
-        ngx_log_error(NGX_LOG_CRIT, c->log, err, "WSARecv() failed");
+        ngx_connection_error(c, err, "WSARecv() failed");
         return NGX_ERROR;
     }
 
diff --git a/src/os/win32/ngx_wsasend_chain.c b/src/os/win32/ngx_wsasend_chain.c
index 438f3db..a52296a 100644
--- a/src/os/win32/ngx_wsasend_chain.c
+++ b/src/os/win32/ngx_wsasend_chain.c
@@ -53,18 +53,19 @@
         err = ngx_errno;
 
         if (err == WSAEWOULDBLOCK) {
-            ngx_log_error(NGX_LOG_INFO, c->log, err, "WSASend() EAGAIN");
+            ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, err,
+                           "WSASend() not ready");
             wev->ready = 0;
             return in;
 
         } else {
             wev->error = 1;
-            ngx_log_error(NGX_LOG_CRIT, c->log, err, "WSASend() failed");
+            ngx_connection_error(c, err, "WSASend() failed");
             return NGX_CHAIN_ERROR;
         }
     }
 
-    ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0, "WSASend(): %d", sent);
+    ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0, "WSASend: %d", sent);
 
     c->sent += sent;
 
@@ -162,7 +163,7 @@
 
             } else {
                 wev->error = 1;
-                ngx_log_error(NGX_LOG_CRIT, c->log, err, "WSASend() failed");
+                ngx_connection_error(c, err, "WSASend() failed");
                 return NGX_CHAIN_ERROR;
             }
  
@@ -187,8 +188,7 @@
 
         if (ngx_event_flags & NGX_USE_IOCP_EVENT) {
             if (wev->ovlp.error) {
-                ngx_log_error(NGX_LOG_ERR, c->log, wev->ovlp.error,
-                              "WSASend() failed");
+                ngx_connection_error(c, wev->ovlp.error, "WSASend() failed");
                 return NGX_CHAIN_ERROR;
             }
 
@@ -197,15 +197,15 @@
         } else {
             if (WSAGetOverlappedResult(c->fd, (LPWSAOVERLAPPED) &wev->ovlp,
                                        &sent, 0, NULL) == 0) {
-                ngx_log_error(NGX_LOG_CRIT, c->log, ngx_socket_errno,
-                             "WSASend() or WSAGetOverlappedResult() failed");
+                ngx_connection_error(c, ngx_socket_errno,
+                               "WSASend() or WSAGetOverlappedResult() failed");
     
                 return NGX_CHAIN_ERROR;
             }
         }
     }
 
-    ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0, "WSASend(): %d", sent);
+    ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0, "WSASend: %d", sent);
 
     c->sent += sent;