Mercurial > hg > nginx
comparison src/os/unix/ngx_freebsd_sendfile_chain.c @ 3063:6f6d7ea70805
refactor EAGAIN/EINTR processing
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Sun, 30 Aug 2009 09:42:29 +0000 |
parents | f69d1aab6a0f |
children | 113cd532b328 |
comparison
equal
deleted
inserted
replaced
3062:aa720192937b | 3063:6f6d7ea70805 |
---|---|
265 file_size + header_size, &hdtr, &sent, 0); | 265 file_size + header_size, &hdtr, &sent, 0); |
266 | 266 |
267 if (rc == -1) { | 267 if (rc == -1) { |
268 err = ngx_errno; | 268 err = ngx_errno; |
269 | 269 |
270 if (err == NGX_EAGAIN || err == NGX_EINTR) { | 270 switch (err) { |
271 if (err == NGX_EINTR) { | 271 case NGX_EAGAIN: |
272 eintr = 1; | 272 eagain = 1; |
273 | 273 break; |
274 } else { | 274 |
275 eagain = 1; | 275 case NGX_EINTR: |
276 } | 276 eintr = 1; |
277 | 277 break; |
278 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, err, | 278 |
279 "sendfile() sent only %O bytes", sent); | 279 default: |
280 | |
281 } else { | |
282 wev->error = 1; | 280 wev->error = 1; |
283 (void) ngx_connection_error(c, err, "sendfile() failed"); | 281 (void) ngx_connection_error(c, err, "sendfile() failed"); |
284 return NGX_CHAIN_ERROR; | 282 return NGX_CHAIN_ERROR; |
285 } | 283 } |
284 | |
285 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, err, | |
286 "sendfile() sent only %O bytes", sent); | |
286 } | 287 } |
287 | 288 |
288 /* | 289 /* |
289 * sendfile() in FreeBSD 3.x-4.x may return value >= 0 | 290 * sendfile() in FreeBSD 3.x-4.x may return value >= 0 |
290 * on success, although only 0 is documented | 291 * on success, although only 0 is documented |
316 "writev: %d of %uz", rc, header_size); | 317 "writev: %d of %uz", rc, header_size); |
317 | 318 |
318 if (rc == -1) { | 319 if (rc == -1) { |
319 err = ngx_errno; | 320 err = ngx_errno; |
320 | 321 |
321 if (err == NGX_EAGAIN || err == NGX_EINTR) { | 322 switch (err) { |
322 if (err == NGX_EINTR) { | 323 case NGX_EAGAIN: |
323 eintr = 1; | 324 break; |
324 } | 325 |
325 | 326 case NGX_EINTR: |
326 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, err, | 327 eintr = 1; |
327 "writev() not ready"); | 328 break; |
328 | 329 |
329 } else { | 330 default: |
330 wev->error = 1; | 331 wev->error = 1; |
331 ngx_connection_error(c, err, "writev() failed"); | 332 ngx_connection_error(c, err, "writev() failed"); |
332 return NGX_CHAIN_ERROR; | 333 return NGX_CHAIN_ERROR; |
333 } | 334 } |
335 | |
336 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, err, | |
337 "writev() not ready"); | |
334 } | 338 } |
335 | 339 |
336 sent = rc > 0 ? rc : 0; | 340 sent = rc > 0 ? rc : 0; |
337 } | 341 } |
338 | 342 |