comparison src/os/unix/ngx_freebsd_sendfile_chain.c @ 216:f1d0e5f09c1e

nginx-0.0.1-2003-12-25-23:26:58 import
author Igor Sysoev <igor@sysoev.ru>
date Thu, 25 Dec 2003 20:26:58 +0000
parents e0c502f15852
children 05592fd7a436
comparison
equal deleted inserted replaced
215:5adc2b75f8a5 216:f1d0e5f09c1e
24 { 24 {
25 int rc; 25 int rc;
26 char *prev; 26 char *prev;
27 off_t sent, fprev; 27 off_t sent, fprev;
28 size_t hsize, fsize, size; 28 size_t hsize, fsize, size;
29 ngx_int_t eintr, eagain; 29 ngx_int_t eintr, eagain, level;
30 struct iovec *iov; 30 struct iovec *iov;
31 struct sf_hdtr hdtr; 31 struct sf_hdtr hdtr;
32 ngx_err_t err; 32 ngx_err_t err;
33 ngx_hunk_t *file; 33 ngx_hunk_t *file;
34 ngx_array_t header, trailer; 34 ngx_array_t header, trailer;
57 file = NULL; 57 file = NULL;
58 fsize = 0; 58 fsize = 0;
59 hsize = 0; 59 hsize = 0;
60 eintr = 0; 60 eintr = 0;
61 eagain = 0; 61 eagain = 0;
62 level = NGX_LOG_CRIT;
62 63
63 ngx_init_array(header, c->pool, 10, sizeof(struct iovec), 64 ngx_init_array(header, c->pool, 10, sizeof(struct iovec),
64 NGX_CHAIN_ERROR); 65 NGX_CHAIN_ERROR);
65 ngx_init_array(trailer, c->pool, 10, sizeof(struct iovec), 66 ngx_init_array(trailer, c->pool, 10, sizeof(struct iovec),
66 NGX_CHAIN_ERROR); 67 NGX_CHAIN_ERROR);
184 if (rc == -1) { 185 if (rc == -1) {
185 err = ngx_errno; 186 err = ngx_errno;
186 187
187 if (err == NGX_EINTR) { 188 if (err == NGX_EINTR) {
188 eintr = 1; 189 eintr = 1;
189 } 190
190 191 } else if (err == NGX_EAGAIN) {
191 if (err == NGX_EAGAIN) {
192 eagain = 1; 192 eagain = 1;
193
194 } else if (err == NGX_EPIPE) {
195 level = NGX_LOG_INFO;
193 } 196 }
194 197
195 if (err == NGX_EAGAIN || err == NGX_EINTR) { 198 if (err == NGX_EAGAIN || err == NGX_EINTR) {
196 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, err, 199 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, err,
197 "sendfile() sent only " OFF_T_FMT " bytes", 200 "sendfile() sent only " OFF_T_FMT " bytes",
198 sent); 201 sent);
199 202
200 } else { 203 } else {
201 wev->error = 1; 204 wev->error = 1;
202 ngx_log_error(NGX_LOG_CRIT, c->log, err, 205 ngx_log_error(level, c->log, err,
203 "sendfile() failed"); 206 "sendfile() failed");
204 return NGX_CHAIN_ERROR; 207 return NGX_CHAIN_ERROR;
205 } 208 }
206 } 209 }
207 210
215 if (rc == -1) { 218 if (rc == -1) {
216 err = ngx_errno; 219 err = ngx_errno;
217 220
218 if (err == NGX_EINTR) { 221 if (err == NGX_EINTR) {
219 eintr = 1; 222 eintr = 1;
223
224 } else if (err == NGX_EPIPE) {
225 level = NGX_LOG_INFO;
220 } 226 }
221 227
222 if (err == NGX_EAGAIN || err == NGX_EINTR) { 228 if (err == NGX_EAGAIN || err == NGX_EINTR) {
223 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, err, 229 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, err,
224 "writev() not ready"); 230 "writev() not ready");
225 231
226 } else { 232 } else {
227 wev->error = 1; 233 wev->error = 1;
228 ngx_log_error(NGX_LOG_CRIT, c->log, err, "writev() failed"); 234 ngx_log_error(level, c->log, err, "writev() failed");
229 return NGX_CHAIN_ERROR; 235 return NGX_CHAIN_ERROR;
230 } 236 }
231 } 237 }
232 238
233 sent = rc > 0 ? rc : 0; 239 sent = rc > 0 ? rc : 0;