comparison src/event/ngx_event_accept.c @ 26:53cb81681040

nginx-0.0.1-2002-12-15-09:25:09 import
author Igor Sysoev <igor@sysoev.ru>
date Sun, 15 Dec 2002 06:25:09 +0000
parents 77c7629a2627
children a8d5abe713e6
comparison
equal deleted inserted replaced
25:a8b156554dfe 26:53cb81681040
1
2 #include <nginx.h>
1 3
2 #include <ngx_config.h> 4 #include <ngx_config.h>
3 #include <ngx_core.h> 5 #include <ngx_core.h>
4 #include <ngx_types.h> 6 #include <ngx_types.h>
5 #include <ngx_log.h> 7 #include <ngx_log.h>
9 #include <ngx_event_accept.h> 11 #include <ngx_event_accept.h>
10 12
11 13
12 int ngx_event_accept(ngx_event_t *ev) 14 int ngx_event_accept(ngx_event_t *ev)
13 { 15 {
14 ngx_err_t err; 16 ngx_err_t err;
15 ngx_socket_t s; 17 ngx_socket_t s;
16 struct sockaddr_in addr; 18 ngx_event_t *rev, *wev;
17 int addrlen = sizeof(struct sockaddr_in); 19 ngx_connection_t *c, *ac;
18 ngx_connection_t *cn = (ngx_connection_t *) ev->data; 20
21 ac = (ngx_connection_t *) ev->data;
19 22
20 ngx_log_debug(ev->log, "ngx_event_accept: accept ready: %d" _ 23 ngx_log_debug(ev->log, "ngx_event_accept: accept ready: %d" _
21 ev->available); 24 ev->available);
22 25
23 ev->ready = 0; 26 ev->ready = 0;
24 27
25 do { 28 do {
26 if ((s = accept(cn->fd, cn->sockaddr, &cn->socklen)) == -1) { 29 if ((s = accept(ac->fd, ac->sockaddr, &ac->socklen)) == -1) {
27 err = ngx_socket_errno; 30 err = ngx_socket_errno;
28 if (err == NGX_EAGAIN) { 31 if (err == NGX_EAGAIN) {
29 ngx_log_error(NGX_LOG_INFO, ev->log, err, 32 ngx_log_error(NGX_LOG_INFO, ev->log, err,
30 "ngx_event_accept: EAGAIN while accept %s", 33 "ngx_event_accept: EAGAIN while accept %s",
31 cn->addr_text); 34 ac->addr_text);
32 return NGX_OK; 35 return NGX_OK;
33 } 36 }
34 37
35 ngx_log_error(NGX_LOG_ERR, ev->log, err, 38 ngx_log_error(NGX_LOG_ERR, ev->log, err,
36 "ngx_event_accept: accept %s failed", cn->addr_text); 39 "ngx_event_accept: accept %s failed", ac->addr_text);
37 /* if we return NGX_ERROR listen socket would be closed */ 40 /* if we return NGX_ERROR listen socket would be closed */
38 return NGX_OK; 41 return NGX_OK;
39 } 42 }
40
41 ngx_log_debug(ev->log, "ngx_event_accept: accept: %d" _ s);
42 43
43 #if !(HAVE_INHERITED_NONBLOCK) 44 #if !(HAVE_INHERITED_NONBLOCK)
44 if (ngx_nonblocking(s) == -1) 45 if (ngx_nonblocking(s) == -1)
45 ngx_log_error(NGX_LOG_ERR, log, ngx_socket_errno, 46 ngx_log_error(NGX_LOG_ERR, log, ngx_socket_errno,
46 ngx_nonblocking_n "failed"); 47 ngx_nonblocking_n "failed");
47 #endif 48 #endif
48 49
49 ngx_memzero(&ngx_read_events[s], sizeof(ngx_event_t)); 50 rev = &ngx_read_events[s];
50 ngx_memzero(&ngx_write_events[s], sizeof(ngx_event_t)); 51 wev = &ngx_write_events[s];
51 ngx_memzero(&ngx_connections[s], sizeof(ngx_connection_t)); 52 c = &ngx_connections[s];
52 53
53 ngx_connections[s].sockaddr = cn->sockaddr; 54 ngx_memzero(rev, sizeof(ngx_event_t));
54 ngx_connections[s].family = cn->family; 55 ngx_memzero(wev, sizeof(ngx_event_t));
55 ngx_connections[s].socklen = cn->socklen; 56 ngx_memzero(c, sizeof(ngx_connection_t));
56 ngx_connections[s].addr = cn->addr;
57 ngx_connections[s].addr_text.len = cn->addr_text.len;
58 ngx_connections[s].post_accept_timeout = cn->post_accept_timeout;
59 57
60 ngx_read_events[s].data = ngx_write_events[s].data 58 c->sockaddr = ac->sockaddr;
61 = &ngx_connections[s]; 59 c->family = ac->family;
62 ngx_connections[s].read = &ngx_read_events[s]; 60 c->socklen = ac->socklen;
63 ngx_connections[s].write = &ngx_write_events[s]; 61 c->addr = ac->addr;
62 c->addr_text.len = ac->addr_text.len;
63 c->post_accept_timeout = ac->post_accept_timeout;
64 64
65 ngx_connections[s].fd = s; 65 rev->index = wev->index = NGX_INVALID_INDEX;
66 ngx_connections[s].unexpected_eof = 1;
67 ngx_write_events[s].write = 1;
68 ngx_write_events[s].ready = 1;
69 66
70 ngx_write_events[s].timer = ngx_read_events[s].timer = 10000; 67 rev->data = wev->data = c;
68 c->read = rev;
69 c->write = wev;
71 70
72 ngx_write_events[s].timer_handler = 71 c->fd = s;
73 ngx_read_events[s].timer_handler = ngx_event_close_connection; 72 c->unexpected_eof = 1;
73 wev->write = 1;
74 wev->ready = 1;
74 75
75 ngx_write_events[s].close_handler = 76 wev->timer = rev->timer = 10000;
76 ngx_read_events[s].close_handler = ngx_event_close_connection; 77 wev->timer_handler = rev->timer_handler = ngx_event_close_connection;
78 wev->close_handler = rev->close_handler = ngx_event_close_connection;
77 79
78 ngx_connections[s].server = cn->server; 80 c->server = ac->server;
79 ngx_connections[s].servers = cn->servers; 81 c->servers = ac->servers;
80 ngx_connections[s].log = 82 c->log = rev->log = wev->log = ev->log;
81 ngx_read_events[s].log = ngx_write_events[s].log = ev->log; 83
84 /* STUB: x86: SP: xadd, MT: lock xadd, MP: lock xadd, shared */
85 c->number = ngx_connection_counter++;
86
87 ngx_log_debug(ev->log, "ngx_event_accept: accept: %d, %d" _
88 s _ c->number);
82 89
83 #if (HAVE_DEFERRED_ACCEPT) 90 #if (HAVE_DEFERRED_ACCEPT)
84 if (ev->accept_filter) 91 if (ev->accept_filter)
85 ngx_read_events[s].ready = 1; 92 rev->ready = 1;
86 #endif 93 #endif
87 94
88 cn->handler(&ngx_connections[s]); 95 ac->handler(c);
89 96
90 #if (HAVE_KQUEUE) 97 #if (HAVE_KQUEUE)
91 #if !(USE_KQUEUE) 98 #if !(USE_KQUEUE)
92 if (ngx_event_type == NGX_KQUEUE_EVENT) 99 if (ngx_event_type == NGX_KQUEUE_EVENT)
93 #endif 100 #endif