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 }