diff src/event/ngx_event.h @ 59:e8cdc2989cee

nginx-0.0.1-2003-02-06-20:21:13 import
author Igor Sysoev <igor@sysoev.ru>
date Thu, 06 Feb 2003 17:21:13 +0000
parents a499e0d1f16e
children 50186b49f2ad
line wrap: on
line diff
--- a/src/event/ngx_event.h
+++ b/src/event/ngx_event.h
@@ -15,6 +15,15 @@
 
 typedef struct ngx_event_s       ngx_event_t;
 
+#if (HAVE_IOCP)
+typedef struct {
+    WSAOVERLAPPED    ovlp;
+    ngx_event_t     *event;
+    int              error;
+} ngx_event_ovlp_t;
+#endif
+
+
 struct ngx_event_s {
     void            *data;
 
@@ -45,11 +54,11 @@ struct ngx_event_s {
                                 /* otherwise:                                */
                                 /*   accept: 1 if accept many, 0 otherwise   */
 
-    /* flags - int are probably faster on write then bits ??? */
-
     unsigned         oneshot:1;
 
+#if 0
     unsigned         listening:1;
+#endif
     unsigned         write:1;
 
     unsigned         active:1;
@@ -66,11 +75,24 @@ struct ngx_event_s {
 #if (HAVE_DEFERRED_ACCEPT)
     unsigned         deferred_accept:1;
 #endif
+
 #if (HAVE_KQUEUE)
     unsigned         eof:1;
     int              error;
 #endif
 
+
+#if (HAVE_AIO)
+
+#if (HAVE_IOCP)
+    ngx_event_ovlp_t ovlp;
+#else
+    struct aiocb     aiocb;
+#endif
+
+#endif
+
+
 #if 0
     void            *thr_ctx;   /* event thread context if $(CC) doesn't
                                    understand __thread declaration
@@ -94,6 +116,10 @@ typedef enum {
 #if (HAVE_KQUEUE)
     NGX_KQUEUE_EVENT,
 #endif
+#if (HAVE_IOCP)
+    NGX_IOCP_EVENT,
+#endif
+    NGX_DUMMY_EVENT    /* avoid comma at end of enumerator list */
 } ngx_event_type_e ;
 
 typedef struct {
@@ -125,6 +151,10 @@ typedef struct {
 /* No need to add or delete event filters - overlapped, aio_read, aioread */
 #define NGX_HAVE_AIO_EVENT      16
 
+/* Need to add socket or halde only once - i/o completion port.
+   It also requires to set HAVE_AIO_EVENT and NGX_HAVE_AIO_EVENT */
+#define NGX_HAVE_IOCP_EVENT     32
+
 /* Event filter is deleted before closing file. Has no meaning
    for select, poll, epoll.
 
@@ -187,43 +217,26 @@ typedef struct {
 #define ngx_process_events   ngx_event_actions.process
 #define ngx_add_event        ngx_event_actions.add
 #define ngx_del_event        ngx_event_actions.del
+
 #if 0
 #define ngx_add_timer        ngx_event_actions.timer
 #else
 #define ngx_add_timer        ngx_event_add_timer
 #endif
+
+#if (HAVE_IOCP_EVENT)
+#define ngx_event_recv       ngx_event_wsarecv
+#elif (HAVE_AIO_EVENT)
+#define ngx_event_recv       ngx_event_aio_read
+#else
 #define ngx_event_recv       ngx_event_recv_core
+#endif
 
 #endif
 
 #define ngx_del_timer        ngx_event_del_timer
 
 
-#if 0
-ngx_inline static void ngx_del_timer(ngx_event_t *ev)
-{
-#if (NGX_DEBUG_EVENT)
-    /* STUB - we can not cast (ngx_connection_t *) here */
-    ngx_log_debug(ev->log, "del timer: %d" _ *(int *)(ev->data));
-#endif
-
-    if (ev->timer_prev) {
-        ev->timer_prev->timer_next = ev->timer_next;
-    }
-
-    if (ev->timer_next) {
-        ev->timer_next->timer_delta += ev->timer_delta;
-        ev->timer_next->timer_prev = ev->timer_prev;
-        ev->timer_next = NULL;
-    }
-
-    if (ev->timer_prev) {
-        ev->timer_prev = NULL;
-    }
-}
-#endif
-
-
 
 extern ngx_event_t          *ngx_read_events;
 extern ngx_event_t          *ngx_write_events;
@@ -236,6 +249,10 @@ extern int                   ngx_event_f
 #endif
 
 
+ssize_t ngx_event_recv_core(ngx_connection_t *c, char *buf, size_t size);
+int ngx_event_close_connection(ngx_event_t *ev);
+
+
 void ngx_pre_thread(ngx_array_t *ls, ngx_pool_t *pool, ngx_log_t *log);
 void ngx_worker(ngx_log_t *log);