Mercurial > hg > nginx
view src/event/modules/ngx_aio_module.c @ 92:19cc647ecd91
nginx-0.0.1-2003-05-20-19:37:55 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Tue, 20 May 2003 15:37:55 +0000 |
parents | 637625a2acdb |
children | 738fe44c70d5 |
line wrap: on
line source
#include <ngx_config.h> #include <ngx_core.h> #include <ngx_types.h> #include <ngx_log.h> #include <ngx_connection.h> #include <ngx_event.h> #include <ngx_event_timer.h> #if (HAVE_KQUEUE) #include <ngx_kqueue_module.h> #endif int ngx_aio_init(int max_connections, ngx_log_t *log) { #if (HAVE_KQUEUE) int rc; rc = ngx_kqueue_init(max_connections, log); ngx_event_flags = NGX_HAVE_AIO_EVENT|NGX_USE_AIO_EVENT; ngx_write_chain_proc = ngx_aio_write_chain; return rc; #endif } #if 0 /* 1 */ int ngx_posix_aio_process_events(ngx_log_t *log) { listen via SIGIO; aio_* via SIGxxx; sigsuspend()/sigwaitinfo()/sigtimedwait(); } /* 2 */ int ngx_posix_aio_process_events(ngx_log_t *log) { unmask signal listen via SIGIO; /* BUG: SIGIO can be delivered before aio_*() */ aio_suspend()/aiowait()/aio_waitcomplete() with timeout mask signal if (ngx_socket_errno == NGX_EINTR) look listen select()/accept() nb listen sockets else aio } /* 3 */ int ngx_posix_aio_process_events(ngx_log_t *log) { unmask signal /* BUG: AIO signal can be delivered before select() */ select(listen); mask signal if (ngx_socket_errno == NGX_EINTR) look ready array } void aio_sig_handler(int signo, siginfo_t *siginfo, void *context) { push siginfo->si_value.sival_ptr } #endif