nginx-0.0.1-2003-06-11-19:28:34 import
diff --git a/src/core/nginx.c b/src/core/nginx.c
index 295e2a9..4f3be98 100644
--- a/src/core/nginx.c
+++ b/src/core/nginx.c
@@ -2,9 +2,7 @@
 
 #include <ngx_config.h>
 #include <ngx_core.h>
-
-#include <ngx_listen.h>
-
+#include <ngx_event.h>
 #include <nginx.h>
 
 
@@ -61,7 +59,7 @@
 
     {
         ngx_init_array(ngx_listening_sockets,
-                       ngx_pool, 10, sizeof(ngx_listen_t),
+                       ngx_pool, 10, sizeof(ngx_listening_t),
                        1);
 
         ngx_memzero(&conf, sizeof(ngx_conf_t));
@@ -126,10 +124,10 @@
 
 static int ngx_open_listening_sockets(ngx_log_t *log)
 {
-    int           times, failed, reuseaddr, i;
-    ngx_err_t     err;
-    ngx_socket_t  s;
-    ngx_listen_t *ls;
+    int              times, failed, reuseaddr, i;
+    ngx_err_t        err;
+    ngx_socket_t     s;
+    ngx_listening_t *ls;
 
     reuseaddr = 1;
 
@@ -137,7 +135,8 @@
          failed = 0;
 
         /* for each listening socket */
-        ls = (ngx_listen_t *) ngx_listening_sockets.elts;
+
+        ls = ngx_listening_sockets.elts;
         for (i = 0; i < ngx_listening_sockets.nelts; i++) {
 
             if (ls[i].bound)
@@ -161,6 +160,19 @@
                 return NGX_ERROR;
             }
 
+#if (WIN32)
+            /*
+             * Winsock assignes a socket number divisible by 4
+             * so to find a connection we divide a socket number by 4.
+             */
+
+            if (s % 4) {
+                ngx_log_error(NGX_LOG_EMERG, ls->log, 0,
+                              ngx_socket_n " created socket %d", s);
+                return NGX_ERROR;
+            }
+#endif
+
             if (setsockopt(s, SOL_SOCKET, SO_REUSEADDR,
                            (const void *) &reuseaddr, sizeof(int)) == -1) {
                 ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno,
diff --git a/src/core/ngx_conf_file.h b/src/core/ngx_conf_file.h
index b517ff0..046ee2c 100644
--- a/src/core/ngx_conf_file.h
+++ b/src/core/ngx_conf_file.h
@@ -123,8 +123,8 @@
     }
 
 #define ngx_conf_merge_size_value(conf, prev, default)                       \
-    if (conf == (size_t) NGX_CONF_UNSET) {                                   \
-        conf = (prev == (size_t) NGX_CONF_UNSET) ? default : prev;           \
+    if (conf == (ssize_t) NGX_CONF_UNSET) {                                   \
+        conf = (prev == (ssize_t) NGX_CONF_UNSET) ? default : prev;           \
     }
 
 #define ngx_conf_merge_str_value(conf, prev, default)                        \
diff --git a/src/core/ngx_connection.h b/src/core/ngx_connection.h
index 81b5987..1bd97f2 100644
--- a/src/core/ngx_connection.h
+++ b/src/core/ngx_connection.h
@@ -1,45 +1,98 @@
 #ifndef _NGX_CONNECTION_H_INCLUDED_
 #define _NGX_CONNECTION_H_INCLUDED_
 
+
 #include <ngx_config.h>
 #include <ngx_core.h>
-#include <ngx_event.h>
+
+
+typedef struct {
+    ngx_socket_t      fd;
+
+    struct sockaddr  *sockaddr;
+    socklen_t         socklen;    /* size of sockaddr */
+    int               addr;       /* offset to address in sockaddr */
+    int               addr_text_max_len;
+    ngx_str_t         addr_text;
+
+    int               family;
+    int               type;
+    int               protocol;
+    int               flags;      /* Winsock2 flags */
+
+    void            (*handler)(ngx_connection_t *c); /* handler of accepted
+                                                        connection */
+    void             *ctx;        /* ngx_http_conf_ctx_t, for example */
+    void             *servers;    /* array of ngx_http_in_addr_t, for example */
+
+    ngx_log_t        *log;
+    int               backlog;
+
+    int               pool_size;
+    int               post_accept_buffer_size; /* should be here because
+                                                  of the AcceptEx() preread */
+    time_t            post_accept_timeout;     /* should be here because
+                                                  of the deferred accept */
+
+    unsigned          bound:1;       /* already bound */
+    unsigned          inherited:1;   /* inherited from previous process */
+    unsigned          nonblocking_accept:1;
+    unsigned          nonblocking:1;
+#if 0
+    unsigned          overlapped:1;  /* Winsock2 overlapped */
+#endif
+    unsigned          shared:1;    /* shared between threads or processes */
+#if (HAVE_DEFERRED_ACCEPT)
+    unsigned          deferred_accept:1;
+#endif
+} ngx_listening_t;
 
 
 struct ngx_connection_s {
-    ngx_socket_t     fd;
-    void            *data;
-
-#ifdef NGX_EVENT
+    void             *data;
     ngx_event_t      *read;
     ngx_event_t      *write;
-#endif
+
+    ngx_socket_t      fd;
+
+    ngx_listening_t  *listening;
 
     off_t             sent;
 
+#if 0
     void            (*handler)(ngx_connection_t *c);
+#endif
     void             *ctx;
     void             *servers;
 
+
     ngx_log_t        *log;
 
     ngx_pool_t       *pool;
+#if 0
     int               pool_size;
 
     int               family;
+#endif
+
     struct sockaddr  *sockaddr;
     socklen_t         socklen;
+    ngx_str_t         addr_text;
+
 #if (HAVE_IOCP)
     struct sockaddr  *local_sockaddr;
     socklen_t         local_socklen;
-    void             *listening;
 #endif
+
+#if 0
     int               addr;
     int               addr_text_max_len;
-    ngx_str_t         addr_text;
+#endif
 
     ngx_hunk_t       *buffer;
+#if 0
     unsigned int      post_accept_timeout;
+#endif
 
     int               number;
 
@@ -47,9 +100,15 @@
     unsigned          unexpected_eof:1;
     unsigned          tcp_nopush:1;
     unsigned          tcp_nopush_enabled:1;
+#if (HAVE_IOCP)
+    unsigned          accept_context_updated:1;
+#endif
 };
 
 
+
+
+
 #if 0
 cached file
     int      fd;       -2 unused, -1 closed (but read or mmaped), >=0 open
@@ -84,8 +143,9 @@
 #endif
 
 
-extern ngx_os_io_t  ngx_io;
 
+extern ngx_array_t  ngx_listening_sockets;
+extern ngx_os_io_t  ngx_io;
 
 
 extern ngx_chain_t *(*ngx_write_chain_proc)
diff --git a/src/core/ngx_log.c b/src/core/ngx_log.c
index 55807ef..3da25f0 100644
--- a/src/core/ngx_log.c
+++ b/src/core/ngx_log.c
@@ -77,7 +77,7 @@
 
     /* pid#tid */
     len += ngx_snprintf(errstr + len, sizeof(errstr) - len - 1,
-                        "%d#%d: ", ngx_getpid(), 0);
+                        PID_FMT "#%d: ", ngx_getpid(), 0);
 
 #if (HAVE_VARIADIC_MACROS)
     va_start(args, fmt);
diff --git a/src/core/ngx_modules.c b/src/core/ngx_modules.c
index 4780570..0dbcde6 100644
--- a/src/core/ngx_modules.c
+++ b/src/core/ngx_modules.c
@@ -17,11 +17,10 @@
 #if (HAVE_DEVPOLL)
 extern ngx_module_t  ngx_devpoll_module;
 #endif
-#if (HAVE_AIO)
-extern ngx_module_t  ngx_aio_module;
-#endif
 #if (HAVE_IOCP)
 extern ngx_module_t  ngx_iocp_module;
+#elif (HAVE_AIO)
+extern ngx_module_t  ngx_aio_module;
 #endif
 
 
@@ -64,11 +63,10 @@
 #if (HAVE_DEVPOLL)
     &ngx_devpoll_module,
 #endif
-#if (HAVE_AIO)
-    &ngx_aio_module,
-#endif
 #if (HAVE_IOCP)
     &ngx_iocp_module,
+#elif (HAVE_AIO)
+    &ngx_aio_module,
 #endif
 
     /* http */