Mercurial > hg > nginx
comparison src/os/unix/ngx_readv_chain.c @ 93:738fe44c70d5
nginx-0.0.1-2003-05-21-17:28:21 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Wed, 21 May 2003 13:28:21 +0000 |
parents | src/os/unix/ngx_recv_chain.c@29bf798b583f |
children | 6dfda4cf5200 |
comparison
equal
deleted
inserted
replaced
92:19cc647ecd91 | 93:738fe44c70d5 |
---|---|
1 | |
2 #include <ngx_config.h> | |
3 #include <ngx_core.h> | |
4 | |
5 | |
6 ssize_t ngx_readv_chain(ngx_connection_t *c, ngx_chain_t *entry) | |
7 { | |
8 ssize_t n; | |
9 struct iovec *iov; | |
10 ngx_err_t err; | |
11 ngx_array_t io; | |
12 | |
13 #if (NGX_SUPPRESS_WARN) | |
14 iov = NULL; | |
15 #endif | |
16 | |
17 ngx_init_array(io, c->pool, 10, sizeof(struct iovec), NGX_ERROR); | |
18 | |
19 while (entry) { | |
20 ngx_test_null(iov, ngx_push_array(&io), NGX_ERROR); | |
21 iov->iov_base = entry->hunk->pos; | |
22 iov->iov_len = entry->hunk->end - entry->hunk->last; | |
23 entry = entry->next; | |
24 } | |
25 | |
26 ngx_log_debug(c->log, "recv: %d:%d" _ io.nelts _ iov->iov_len); | |
27 | |
28 n = readv(c->fd, (struct iovec *) io.elts, io.nelts); | |
29 | |
30 ngx_destroy_array(&io); | |
31 | |
32 if (n == -1) { | |
33 c->read->ready = 0; | |
34 | |
35 err = ngx_errno; | |
36 if (err == NGX_EAGAIN) { | |
37 ngx_log_error(NGX_LOG_INFO, c->log, err, "readv() returned EAGAIN"); | |
38 return NGX_AGAIN; | |
39 } | |
40 | |
41 ngx_log_error(NGX_LOG_ERR, c->log, err, "readv() failed"); | |
42 return NGX_ERROR; | |
43 } | |
44 | |
45 return n; | |
46 } |