comparison src/os/unix/ngx_linux_sendfile_chain.c @ 520:d41628eb4d0a NGINX_0_8_12

nginx 0.8.12 *) Feature: the "sendfile" parameter in the "aio" directive on FreeBSD. *) Bugfix: in try_files; the bug had appeared in 0.8.11. *) Bugfix: in memcached; the bug had appeared in 0.8.11.
author Igor Sysoev <http://sysoev.ru>
date Mon, 31 Aug 2009 00:00:00 +0400
parents f7cd062ee035
children d0f7a625f27c
comparison
equal deleted inserted replaced
519:1fd1b769cd78 520:d41628eb4d0a
261 rc = sendfile(c->fd, file->file->fd, &offset, file_size); 261 rc = sendfile(c->fd, file->file->fd, &offset, file_size);
262 262
263 if (rc == -1) { 263 if (rc == -1) {
264 err = ngx_errno; 264 err = ngx_errno;
265 265
266 if (err == NGX_EAGAIN || err == NGX_EINTR) { 266 switch (err) {
267 if (err == NGX_EINTR) { 267 case NGX_EAGAIN:
268 eintr = 1; 268 break;
269 } 269
270 270 case NGX_EINTR:
271 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, err, 271 eintr = 1;
272 "sendfile() is not ready"); 272 break;
273 273
274 } else { 274 default:
275 wev->error = 1; 275 wev->error = 1;
276 ngx_connection_error(c, err, "sendfile() failed"); 276 ngx_connection_error(c, err, "sendfile() failed");
277 return NGX_CHAIN_ERROR; 277 return NGX_CHAIN_ERROR;
278 } 278 }
279
280 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, err,
281 "sendfile() is not ready");
279 } 282 }
280 283
281 sent = rc > 0 ? rc : 0; 284 sent = rc > 0 ? rc : 0;
282 285
283 ngx_log_debug4(NGX_LOG_DEBUG_EVENT, c->log, 0, 286 ngx_log_debug4(NGX_LOG_DEBUG_EVENT, c->log, 0,
288 rc = writev(c->fd, header.elts, header.nelts); 291 rc = writev(c->fd, header.elts, header.nelts);
289 292
290 if (rc == -1) { 293 if (rc == -1) {
291 err = ngx_errno; 294 err = ngx_errno;
292 295
293 if (err == NGX_EAGAIN || err == NGX_EINTR) { 296 switch (err) {
294 if (err == NGX_EINTR) { 297 case NGX_EAGAIN:
295 eintr = 1; 298 break;
296 } 299
297 300 case NGX_EINTR:
298 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, err, 301 eintr = 1;
299 "writev() not ready"); 302 break;
300 303
301 } else { 304 default:
302 wev->error = 1; 305 wev->error = 1;
303 ngx_connection_error(c, err, "writev() failed"); 306 ngx_connection_error(c, err, "writev() failed");
304 return NGX_CHAIN_ERROR; 307 return NGX_CHAIN_ERROR;
305 } 308 }
309
310 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, err,
311 "writev() not ready");
306 } 312 }
307 313
308 sent = rc > 0 ? rc : 0; 314 sent = rc > 0 ? rc : 0;
309 315
310 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0, "writev: %O", sent); 316 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0, "writev: %O", sent);