Mercurial > hg > nginx-quic
comparison src/os/unix/ngx_linux_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 | d620f497c50f |
comparison
equal
deleted
inserted
replaced
3062:aa720192937b | 3063:6f6d7ea70805 |
---|---|
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); |