Mercurial > hg > nginx
diff src/event/ngx_event.h @ 0:4eff17414a43
nginx-0.0.1-2002-08-06-20:39:45 import
The first code that uses "ngx_" prefix, the previous one used "gx_" prefix.
At that point the code is not yet usable. The first draft ideas are dated
back to 23.10.2001.
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Tue, 06 Aug 2002 16:39:45 +0000 |
parents | |
children | d220029ac7f3 |
line wrap: on
line diff
new file mode 100644 --- /dev/null +++ b/src/event/ngx_event.h @@ -0,0 +1,127 @@ +#ifndef _NGX_EVENT_H_INCLUDED_ +#define _NGX_EVENT_H_INCLUDED_ + + +#include <ngx_config.h> +#include <ngx_types.h> +#include <ngx_log.h> + +typedef struct ngx_event_s ngx_event_t; + +struct ngx_event_s { + void *data; + + int (*event_handler)(ngx_event_t *ev); + int (*close_handler)(ngx_event_t *ev); + void *context; + char *action; + + ngx_event_t *prev; /* queue in select(), poll() */ + ngx_event_t *next; + + int (*timer_handler)(ngx_event_t *ev); + ngx_event_t *timer_prev; + ngx_event_t *timer_next; + + u_int timer_delta; + u_int timer; + + ngx_log_t *log; + + int available; /* kqueue only: */ + /* accept: number of sockets that wait */ + /* to be accepted */ + /* read: bytes to read */ + /* write: available space in buffer */ + /* otherwise: */ + /* accept: 1 if accept many, 0 otherwise */ + + /* flags - int are probably faster on write then bits ??? */ + unsigned listening:1; + unsigned write:1; + + unsigned ready:1; + unsigned timedout:1; + unsigned process:1; + unsigned read_discarded:1; + + unsigned unexpected_eof:1; + +#if (HAVE_DEFERRED_ACCEPT) + unsigned accept_filter:1; +#endif +#if (HAVE_KQUEUE) + unsigned eof:1; + int errno; +#endif +}; + +typedef enum { + NGX_SELECT_EVENT = 0, +#if (HAVE_POLL) + NGX_POLL_EVENT, +#endif +#if (HAVE_KQUEUE) + NGX_KQUEUE_EVENT, +#endif +} ngx_event_type_e ; + +typedef struct { + int (*add)(ngx_event_t *ev, int event, u_int flags); + int (*del)(ngx_event_t *ev, int event); + int (*process)(ngx_log_t *log); +/* + int (*read)(ngx_event_t *ev, char *buf, size_t size); + int (*write)(ngx_event_t *ev, char *buf, size_t size); +*/ +} ngx_event_actions_t; + + +#if (HAVE_KQUEUE) + +#define NGX_READ_EVENT EVFILT_READ +#define NGX_WRITE_EVENT EVFILT_WRITE +#define NGX_TIMER_EVENT (-EVFILT_SYSCOUNT - 1) + +#define NGX_ONESHOT_EVENT EV_ONESHOT +#define NGX_CLEAR_EVENT EV_CLEAR + +#else + +#define NGX_READ_EVENT 0 +#define NGX_WRITE_EVENT 1 +#define NGX_TIMER_EVENT 2 + +#define NGX_ONESHOT_EVENT 1 +#define NGX_CLEAR_EVENT 2 + +#endif + + +#if (USE_KQUEUE) +#define ngx_init_events ngx_kqueue_init +#define ngx_process_events ngx_kqueue_process_events +#define ngx_add_event ngx_kqueue_add_event +#define ngx_del_event ngx_kqueue_del_event +#else +#define ngx_init_events (ngx_event_init[ngx_event_type]) +#define ngx_process_events ngx_event_actions.process +#define ngx_add_event ngx_event_actions.add +#define ngx_del_event ngx_event_actions.del +#endif + + +extern ngx_event_t *ngx_read_events; +extern ngx_event_t *ngx_write_events; +extern ngx_connection_t *ngx_connections; + +#if !(USE_KQUEUE) +extern ngx_event_actions_t ngx_event_actions; +extern ngx_event_type_e ngx_event_type; +#endif + + +void ngx_worker(ngx_listen_t *sock, int n, ngx_pool_t *pool, ngx_log_t *log); + + +#endif /* _NGX_EVENT_H_INCLUDED_ */