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 }