Mercurial > hg > nginx-quic
comparison src/event/ngx_event_recv.c @ 67:5a7d1aaa1618
nginx-0.0.1-2003-03-11-23:38:13 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Tue, 11 Mar 2003 20:38:13 +0000 |
parents | 50186b49f2ad |
children | e43f406e4525 |
comparison
equal
deleted
inserted
replaced
66:4876cd4a36bb | 67:5a7d1aaa1618 |
---|---|
8 | 8 |
9 ssize_t ngx_event_recv_core(ngx_connection_t *c, char *buf, size_t size) | 9 ssize_t ngx_event_recv_core(ngx_connection_t *c, char *buf, size_t size) |
10 { | 10 { |
11 int n; | 11 int n; |
12 ngx_err_t err; | 12 ngx_err_t err; |
13 ngx_event_t *ev; | |
13 | 14 |
14 if (c->read->timedout) { | 15 ev = c->read; |
16 | |
17 if (ev->timedout) { | |
15 ngx_set_socket_errno(NGX_ETIMEDOUT); | 18 ngx_set_socket_errno(NGX_ETIMEDOUT); |
16 ngx_log_error(NGX_LOG_ERR, c->log, NGX_ETIMEDOUT, "recv() failed"); | 19 ngx_log_error(NGX_LOG_ERR, c->log, NGX_ETIMEDOUT, "recv() failed"); |
17 return NGX_ERROR; | 20 return NGX_ERROR; |
18 } | 21 } |
19 | 22 |
20 #if (HAVE_KQUEUE) | 23 #if (HAVE_KQUEUE) |
21 ngx_log_debug(c->log, "ngx_event_recv: eof:%d, avail:%d, err:%d" _ | 24 if (ngx_event_flags & NGX_HAVE_KQUEUE_EVENT) { |
22 c->read->eof _ c->read->available _ c->read->error); | 25 ngx_log_debug(c->log, "ngx_event_recv: eof:%d, avail:%d, err:%d" _ |
26 ev->eof _ ev->available _ ev->error); | |
27 } | |
23 #endif | 28 #endif |
24 | 29 |
25 #if (USE_KQUEUE) | 30 #if (USE_KQUEUE) |
26 | 31 |
27 if (c->read->eof && c->read->available == 0) { | 32 if (ev->eof && ev->available == 0) { |
28 if (c->read->error) { | 33 if (ev->error) { |
29 ngx_log_error(NGX_LOG_ERR, c->log, c->read->error, | 34 ngx_set_socket_errno(ev->error); |
35 | |
36 if (ev->error == NGX_ECONNRESET && ev->ignore_econnreset) { | |
37 return 0; | |
38 } | |
39 | |
40 ngx_log_error(NGX_LOG_ERR, c->log, ev->error, | |
30 "recv() failed"); | 41 "recv() failed"); |
31 return NGX_ERROR; | 42 return NGX_ERROR; |
32 } | 43 } |
33 | 44 |
34 return 0; | 45 return 0; |
35 } | 46 } |
36 | 47 |
37 #elif (HAVE_KQUEUE) | 48 #elif (HAVE_KQUEUE) |
38 | 49 |
39 if (ngx_event_type == NGX_HAVE_KQUEUE_EVENT) { | 50 if (ngx_event_flags & NGX_HAVE_KQUEUE_EVENT) { |
40 if (c->read->eof && c->read->available == 0) { | 51 if (ev->eof && ev->available == 0) { |
41 if (c->read->error) { | 52 if (ev->error) { |
42 ngx_log_error(NGX_LOG_ERR, c->log, c->read->error, | 53 ngx_set_socket_errno(ev->error); |
54 | |
55 if (ev->error == NGX_ECONNRESET && ev->ignore_econnreset) { | |
56 return 0; | |
57 } | |
58 | |
59 ngx_log_error(NGX_LOG_ERR, c->log, ev->error, | |
43 "recv() failed"); | 60 "recv() failed"); |
44 return NGX_ERROR; | 61 return NGX_ERROR; |
45 } | 62 } |
46 | 63 |
47 return 0; | 64 return 0; |
53 n = ngx_recv(c->fd, buf, size, 0); | 70 n = ngx_recv(c->fd, buf, size, 0); |
54 | 71 |
55 if (n == -1) { | 72 if (n == -1) { |
56 err = ngx_socket_errno; | 73 err = ngx_socket_errno; |
57 | 74 |
75 if (ev->error == NGX_ECONNRESET && ev->ignore_econnreset) { | |
76 return 0; | |
77 } | |
78 | |
58 if (err == NGX_EAGAIN) { | 79 if (err == NGX_EAGAIN) { |
59 ngx_log_error(NGX_LOG_INFO, c->log, err, "recv() returns EAGAIN"); | 80 ngx_log_error(NGX_LOG_INFO, c->log, err, "recv() returns EAGAIN"); |
60 return NGX_AGAIN; | 81 return NGX_AGAIN; |
61 } | 82 } |
62 | 83 |
64 return NGX_ERROR; | 85 return NGX_ERROR; |
65 } | 86 } |
66 | 87 |
67 #if (USE_KQUEUE) | 88 #if (USE_KQUEUE) |
68 | 89 |
69 c->read->available -= n; | 90 ev->available -= n; |
70 | 91 |
71 #elif (HAVE_KQUEUE) | 92 #elif (HAVE_KQUEUE) |
72 | 93 |
73 if (ngx_event_type == NGX_HAVE_KQUEUE_EVENT) { | 94 if (ngx_event_flags & NGX_HAVE_KQUEUE_EVENT) { |
74 c->read->available -= n; | 95 ev->available -= n; |
75 } | 96 } |
76 | 97 |
77 #endif | 98 #endif |
78 | 99 |
79 return n; | 100 return n; |