Mercurial > hg > nginx-quic
comparison src/os/unix/ngx_solaris_sendfilev_chain.c @ 198:34995c5ec6c4
nginx-0.0.1-2003-11-27-22:01:37 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Thu, 27 Nov 2003 19:01:37 +0000 |
parents | 0b81c7a0b133 |
children | 70e1c7d2b83d |
comparison
equal
deleted
inserted
replaced
197:0b81c7a0b133 | 198:34995c5ec6c4 |
---|---|
7 ngx_chain_t *ngx_solaris_sendfilev_chain(ngx_connection_t *c, ngx_chain_t *in) | 7 ngx_chain_t *ngx_solaris_sendfilev_chain(ngx_connection_t *c, ngx_chain_t *in) |
8 { | 8 { |
9 int fd; | 9 int fd; |
10 char *prev; | 10 char *prev; |
11 off_t fprev; | 11 off_t fprev; |
12 size_t sent; | 12 size_t sent, size; |
13 ssize_t n; | 13 ssize_t n; |
14 ngx_int_t eintr; | 14 ngx_int_t eintr; |
15 ngx_err_t err; | |
15 sendfilevec_t *sfv; | 16 sendfilevec_t *sfv; |
16 ngx_array_t vec; | 17 ngx_array_t vec; |
17 ngx_event_t *wev; | 18 ngx_event_t *wev; |
18 ngx_chain_t *cl; | 19 ngx_chain_t *cl; |
19 | 20 |
24 } | 25 } |
25 | 26 |
26 do { | 27 do { |
27 fd = SFV_FD_SELF; | 28 fd = SFV_FD_SELF; |
28 prev = NULL; | 29 prev = NULL; |
30 fprev = 0; | |
29 sfv = NULL; | 31 sfv = NULL; |
30 eintr = 0; | 32 eintr = 0; |
31 sent = 0; | 33 sent = 0; |
34 | |
35 ngx_init_array(vec, c->pool, 10, sizeof(sendfilevec_t), | |
36 NGX_CHAIN_ERROR); | |
32 | 37 |
33 /* create the sendfilevec and coalesce the neighbouring hunks */ | 38 /* create the sendfilevec and coalesce the neighbouring hunks */ |
34 | 39 |
35 for (cl = in; cl; cl = cl->next) { | 40 for (cl = in; cl; cl = cl->next) { |
36 if (ngx_hunk_special(cl->hunk)) { | 41 if (ngx_hunk_special(cl->hunk)) { |
45 | 50 |
46 } else { | 51 } else { |
47 ngx_test_null(sfv, ngx_push_array(&vec), NGX_CHAIN_ERROR); | 52 ngx_test_null(sfv, ngx_push_array(&vec), NGX_CHAIN_ERROR); |
48 sfv->sfv_fd = SFV_FD_SELF; | 53 sfv->sfv_fd = SFV_FD_SELF; |
49 sfv->sfv_flag = 0; | 54 sfv->sfv_flag = 0; |
50 sfv->sfv_off = cl->hunk->pos; | 55 sfv->sfv_off = (off_t) (uintptr_t) cl->hunk->pos; |
51 sfv->sfv_len = cl->hunk->last - cl->hunk->pos; | 56 sfv->sfv_len = cl->hunk->last - cl->hunk->pos; |
52 } | 57 } |
53 | 58 |
54 prev = cl->hunk->last; | 59 prev = cl->hunk->last; |
55 | 60 |
70 | 75 |
71 fprev = cl->hunk->file_last; | 76 fprev = cl->hunk->file_last; |
72 } | 77 } |
73 } | 78 } |
74 | 79 |
75 n = sendfile(c->fd, vec->elts, vec->nelts, &sent); | 80 n = sendfilev(c->fd, vec.elts, vec.nelts, &sent); |
76 | 81 |
77 if (n == -1) { | 82 if (n == -1) { |
78 err = ngx_errno; | 83 err = ngx_errno; |
79 | 84 |
80 if (err == NGX_EINTR) { | 85 if (err == NGX_EINTR) { |
91 return NGX_CHAIN_ERROR; | 96 return NGX_CHAIN_ERROR; |
92 } | 97 } |
93 } | 98 } |
94 | 99 |
95 #if (NGX_DEBUG_WRITE_CHAIN) | 100 #if (NGX_DEBUG_WRITE_CHAIN) |
96 ngx_log_debug(c->log, "sendfilev: %d " SIZE_T_FMT ", n _ sent); | 101 ngx_log_debug(c->log, "sendfilev: %d " SIZE_T_FMT _ n _ sent); |
97 #endif | 102 #endif |
98 | 103 |
99 c->sent += sent; | 104 c->sent += sent; |
100 | 105 |
101 for (cl = in; cl; cl = cl->next) { | 106 for (cl = in; cl; cl = cl->next) { |