comparison src/os/unix/ngx_readv_chain.c @ 93:738fe44c70d5

nginx-0.0.1-2003-05-21-17:28:21 import
author Igor Sysoev <igor@sysoev.ru>
date Wed, 21 May 2003 13:28:21 +0000
parents src/os/unix/ngx_recv_chain.c@29bf798b583f
children 6dfda4cf5200
comparison
equal deleted inserted replaced
92:19cc647ecd91 93:738fe44c70d5
1
2 #include <ngx_config.h>
3 #include <ngx_core.h>
4
5
6 ssize_t ngx_readv_chain(ngx_connection_t *c, ngx_chain_t *entry)
7 {
8 ssize_t n;
9 struct iovec *iov;
10 ngx_err_t err;
11 ngx_array_t io;
12
13 #if (NGX_SUPPRESS_WARN)
14 iov = NULL;
15 #endif
16
17 ngx_init_array(io, c->pool, 10, sizeof(struct iovec), NGX_ERROR);
18
19 while (entry) {
20 ngx_test_null(iov, ngx_push_array(&io), NGX_ERROR);
21 iov->iov_base = entry->hunk->pos;
22 iov->iov_len = entry->hunk->end - entry->hunk->last;
23 entry = entry->next;
24 }
25
26 ngx_log_debug(c->log, "recv: %d:%d" _ io.nelts _ iov->iov_len);
27
28 n = readv(c->fd, (struct iovec *) io.elts, io.nelts);
29
30 ngx_destroy_array(&io);
31
32 if (n == -1) {
33 c->read->ready = 0;
34
35 err = ngx_errno;
36 if (err == NGX_EAGAIN) {
37 ngx_log_error(NGX_LOG_INFO, c->log, err, "readv() returned EAGAIN");
38 return NGX_AGAIN;
39 }
40
41 ngx_log_error(NGX_LOG_ERR, c->log, err, "readv() failed");
42 return NGX_ERROR;
43 }
44
45 return n;
46 }