3 * Copyright (C) Igor Sysoev
4 * Copyright (C) Nginx, Inc.
8 #include <ngx_config.h>
10 #include <ngx_event.h>
13 extern int ngx_kqueue
;
17 ngx_aio_read(ngx_connection_t
*c
, u_char
*buf
, size_t size
)
25 ngx_log_error(NGX_LOG_ALERT
, c
->log
, 0, "second aio post");
29 ngx_log_debug1(NGX_LOG_DEBUG_EVENT
, c
->log
, 0,
30 "rev->complete: %d", rev
->complete
);
31 ngx_log_debug1(NGX_LOG_DEBUG_EVENT
, c
->log
, 0,
32 "aio size: %d", size
);
35 ngx_memzero(&rev
->aiocb
, sizeof(struct aiocb
));
37 rev
->aiocb
.aio_fildes
= c
->fd
;
38 rev
->aiocb
.aio_buf
= buf
;
39 rev
->aiocb
.aio_nbytes
= size
;
42 rev
->aiocb
.aio_sigevent
.sigev_notify_kqueue
= ngx_kqueue
;
43 rev
->aiocb
.aio_sigevent
.sigev_notify
= SIGEV_KEVENT
;
44 rev
->aiocb
.aio_sigevent
.sigev_value
.sigval_ptr
= rev
;
47 if (aio_read(&rev
->aiocb
) == -1) {
48 ngx_log_error(NGX_LOG_CRIT
, rev
->log
, ngx_errno
,
54 ngx_log_debug1(NGX_LOG_DEBUG_EVENT
, c
->log
, 0,
55 "aio_read: #%d OK", c
->fd
);
63 n
= aio_error(&rev
->aiocb
);
65 ngx_log_error(NGX_LOG_ALERT
, c
->log
, ngx_errno
, "aio_error() failed");
71 if (n
== NGX_EINPROGRESS
) {
73 ngx_log_error(NGX_LOG_ALERT
, c
->log
, n
,
74 "aio_read() still in progress");
80 ngx_log_error(NGX_LOG_CRIT
, c
->log
, n
, "aio_read() failed");
86 n
= aio_return(&rev
->aiocb
);
88 ngx_log_error(NGX_LOG_ALERT
, c
->log
, ngx_errno
,
89 "aio_return() failed");
96 ngx_log_debug2(NGX_LOG_DEBUG_EVENT
, rev
->log
, 0,
97 "aio_read: #%d %d", c
->fd
, n
);