Mercurial > hg > nginx
comparison src/os/unix/ngx_recv.c @ 218:05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Mon, 05 Jan 2004 20:55:48 +0000 |
parents | 0061d1f0908d |
children | b6793bc5034b |
comparison
equal
deleted
inserted
replaced
217:c5d1cdcb04ec | 218:05592fd7a436 |
---|---|
15 ngx_event_t *rev; | 15 ngx_event_t *rev; |
16 | 16 |
17 rev = c->read; | 17 rev = c->read; |
18 | 18 |
19 if (ngx_event_flags & NGX_HAVE_KQUEUE_EVENT) { | 19 if (ngx_event_flags & NGX_HAVE_KQUEUE_EVENT) { |
20 ngx_log_debug(c->log, "recv: eof:%d, avail:%d, err:%d" _ | 20 ngx_log_debug3(NGX_LOG_DEBUG_EVENT, c->log, 0, |
21 rev->kq_eof _ rev->available _ rev->kq_errno); | 21 "recv: eof:%d, avail:%d, err:%d", |
22 rev->kq_eof, rev->available, rev->kq_errno); | |
22 | 23 |
23 if (rev->available == 0) { | 24 if (rev->available == 0) { |
24 if (rev->kq_eof) { | 25 if (rev->kq_eof) { |
25 rev->ready = 0; | 26 rev->ready = 0; |
26 rev->eof = 1; | 27 rev->eof = 1; |
27 | 28 |
28 if (rev->kq_errno) { | 29 if (rev->kq_errno) { |
29 rev->error = 1; | 30 rev->error = 1; |
30 ngx_set_socket_errno(rev->kq_errno); | 31 ngx_set_socket_errno(rev->kq_errno); |
31 return ngx_unix_recv_error(rev, rev->kq_errno); | 32 ngx_log_error(NGX_LOG_INFO, c->log, rev->kq_errno, |
33 "kevent() reported about closed connection"); | |
34 | |
35 if (rev->kq_errno == NGX_ECONNRESET | |
36 && rev->log_error == NGX_ERROR_IGNORE_ECONNRESET) | |
37 { | |
38 return 0; | |
39 } | |
40 | |
41 return NGX_ERROR; | |
32 } | 42 } |
33 | 43 |
34 return 0; | 44 return 0; |
35 | 45 |
36 } else { | 46 } else { |
40 } | 50 } |
41 | 51 |
42 do { | 52 do { |
43 n = recv(c->fd, buf, size, 0); | 53 n = recv(c->fd, buf, size, 0); |
44 | 54 |
45 ngx_log_debug(c->log, "recv: %d:%d" _ n _ size); | 55 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, c->log, 0,"recv: %d:%d", n, size); |
46 | 56 |
47 if (n >= 0) { | 57 if (n >= 0) { |
48 if (ngx_event_flags & NGX_HAVE_KQUEUE_EVENT) { | 58 if (ngx_event_flags & NGX_HAVE_KQUEUE_EVENT) { |
49 rev->available -= n; | 59 rev->available -= n; |
50 | 60 |
102 rev = c->read; | 112 rev = c->read; |
103 | 113 |
104 do { | 114 do { |
105 n = recv(c->fd, buf, size, 0); | 115 n = recv(c->fd, buf, size, 0); |
106 | 116 |
107 ngx_log_debug(c->log, "recv: %d:%d" _ n _ size); | 117 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, c->log, 0,"recv: %d:%d", n, size); |
108 | 118 |
109 if (n >= 0) { | 119 if (n >= 0) { |
110 if ((size_t) n < size) { | 120 if ((size_t) n < size) { |
111 rev->ready = 0; | 121 rev->ready = 0; |
112 } | 122 } |
136 #endif /* NAVE_KQUEUE */ | 146 #endif /* NAVE_KQUEUE */ |
137 | 147 |
138 | 148 |
139 static int ngx_unix_recv_error(ngx_event_t *rev, ngx_err_t err) | 149 static int ngx_unix_recv_error(ngx_event_t *rev, ngx_err_t err) |
140 { | 150 { |
141 if (err == NGX_ECONNRESET && rev->ignore_econnreset) { | 151 ngx_int_t level; |
142 return 0; | |
143 } | |
144 | 152 |
145 if (err == NGX_EAGAIN) { | 153 if (err == NGX_EAGAIN || err == NGX_EINTR) { |
146 ngx_log_error(NGX_LOG_INFO, rev->log, err, "recv() returned EAGAIN"); | 154 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, rev->log, err, "recv() not ready"); |
147 return NGX_AGAIN; | 155 return NGX_AGAIN; |
148 } | 156 } |
149 | 157 |
150 if (err == NGX_EINTR) { | 158 if (err == NGX_ECONNRESET) { |
151 ngx_log_error(NGX_LOG_INFO, rev->log, err, "recv() returned EINTR"); | 159 |
152 return NGX_EINTR; | 160 switch (rev->log_error) { |
161 case NGX_ERROR_IGNORE_ECONNRESET: | |
162 return 0; | |
163 case NGX_ERROR_INFO: | |
164 level = NGX_LOG_INFO; | |
165 break; | |
166 case NGX_ERROR_ERR: | |
167 level = NGX_LOG_ERR; | |
168 break; | |
169 default: | |
170 level = NGX_LOG_CRIT; | |
171 } | |
172 | |
173 } else { | |
174 level = NGX_LOG_CRIT; | |
153 } | 175 } |
154 | 176 |
155 ngx_log_error(NGX_LOG_ERR, rev->log, err, "recv() failed"); | 177 ngx_log_error(level, rev->log, err, "recv() failed"); |
156 | 178 |
157 return NGX_ERROR; | 179 return NGX_ERROR; |
158 } | 180 } |