Mercurial > hg > nginx
comparison src/os/unix/ngx_writev_chain.c @ 103:6dfda4cf5200
nginx-0.0.1-2003-06-11-19:28:34 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Wed, 11 Jun 2003 15:28:34 +0000 |
parents | 8220378432a8 |
children | ef8c87afcfc5 |
comparison
equal
deleted
inserted
replaced
102:7e86d028d8f0 | 103:6dfda4cf5200 |
---|---|
4 | 4 |
5 | 5 |
6 ngx_chain_t *ngx_writev_chain(ngx_connection_t *c, ngx_chain_t *in) | 6 ngx_chain_t *ngx_writev_chain(ngx_connection_t *c, ngx_chain_t *in) |
7 { | 7 { |
8 char *prev; | 8 char *prev; |
9 size_t size; | 9 ssize_t n, size; |
10 ssize_t n; | |
11 off_t sent; | 10 off_t sent; |
12 struct iovec *iov; | 11 struct iovec *iov; |
13 ngx_err_t err; | 12 ngx_err_t err; |
14 ngx_array_t io; | 13 ngx_array_t iovecs; |
15 ngx_chain_t *ce; | 14 ngx_chain_t *ce; |
16 | 15 |
17 ngx_init_array(io, c->pool, 10, sizeof(struct iovec), NGX_CHAIN_ERROR); | 16 ngx_init_array(iovecs, c->pool, 10, sizeof(struct iovec), NGX_CHAIN_ERROR); |
18 | 17 |
19 prev = NULL; | 18 prev = NULL; |
20 iov = NULL; | 19 iov = NULL; |
21 | 20 |
22 /* create the iovec and coalesce the neighbouring chain entries */ | 21 /* create the iovec and coalesce the neighbouring chain entries */ |
25 if (prev == ce->hunk->pos) { | 24 if (prev == ce->hunk->pos) { |
26 iov->iov_len += ce->hunk->last - ce->hunk->pos; | 25 iov->iov_len += ce->hunk->last - ce->hunk->pos; |
27 prev = ce->hunk->last; | 26 prev = ce->hunk->last; |
28 | 27 |
29 } else { | 28 } else { |
30 ngx_test_null(iov, ngx_push_array(&io), NGX_CHAIN_ERROR); | 29 ngx_test_null(iov, ngx_push_array(&iovecs), NGX_CHAIN_ERROR); |
31 iov->iov_base = ce->hunk->pos; | 30 iov->iov_base = ce->hunk->pos; |
32 iov->iov_len = ce->hunk->last - ce->hunk->pos; | 31 iov->iov_len = ce->hunk->last - ce->hunk->pos; |
33 prev = ce->hunk->last; | 32 prev = ce->hunk->last; |
34 } | 33 } |
35 } | 34 } |
36 | 35 |
37 n = writev(c->fd, (struct iovec *) io.elts, io.nelts); | 36 n = writev(c->fd, iovecs.elts, iovecs.nelts); |
38 | 37 |
39 if (n == -1) { | 38 if (n == -1) { |
40 err = ngx_errno; | 39 err = ngx_errno; |
41 if (err == NGX_EAGAIN) { | 40 if (err == NGX_EAGAIN) { |
42 ngx_log_error(NGX_LOG_INFO, c->log, err, "writev() EAGAIN"); | 41 ngx_log_error(NGX_LOG_INFO, c->log, err, "writev() EAGAIN"); |
91 #endif | 90 #endif |
92 | 91 |
93 break; | 92 break; |
94 } | 93 } |
95 | 94 |
96 ngx_destroy_array(&io); | 95 ngx_destroy_array(&iovecs); |
97 | 96 |
98 return ce; | 97 return ce; |
99 } | 98 } |