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;