Mercurial > hg > nginx
comparison src/event/ngx_event_accept.c @ 0:4eff17414a43
nginx-0.0.1-2002-08-06-20:39:45 import
The first code that uses "ngx_" prefix, the previous one used "gx_" prefix.
At that point the code is not yet usable. The first draft ideas are dated
back to 23.10.2001.
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Tue, 06 Aug 2002 16:39:45 +0000 |
parents | |
children | 34a521b1a148 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:4eff17414a43 |
---|---|
1 | |
2 #include <ngx_config.h> | |
3 #include <ngx_types.h> | |
4 #include <ngx_log.h> | |
5 #include <ngx_connection.h> | |
6 #include <ngx_event.h> | |
7 #include <ngx_event_close.h> | |
8 #include <ngx_event_accept.h> | |
9 | |
10 | |
11 int ngx_event_accept(ngx_event_t *ev) | |
12 { | |
13 ngx_err_t err; | |
14 ngx_socket_t s; | |
15 struct sockaddr_in addr; | |
16 int addrlen = sizeof(struct sockaddr_in); | |
17 ngx_connection_t *cn = (ngx_connection_t *) ev->data; | |
18 | |
19 ngx_log_debug(ev->log, "ngx_event_accept: accept ready: %d" _ | |
20 ev->available); | |
21 | |
22 ev->ready = 0; | |
23 | |
24 do { | |
25 if ((s = accept(cn->fd, (struct sockaddr *) &addr, &addrlen)) == -1) { | |
26 err = ngx_socket_errno; | |
27 if (err == NGX_EAGAIN) { | |
28 ngx_log_error(NGX_LOG_INFO, ev->log, err, | |
29 "ngx_event_accept: EAGAIN while accept"); | |
30 return 0; | |
31 } | |
32 | |
33 ngx_log_error(NGX_LOG_ERR, ev->log, err, | |
34 "ngx_event_accept: accept failed"); | |
35 /* if we return -1 listen socket would be closed */ | |
36 return 0; | |
37 } | |
38 | |
39 ngx_log_debug(ev->log, "ngx_event_accept: accepted socket: %d" _ s); | |
40 | |
41 ngx_memzero(&ngx_read_events[s], sizeof(ngx_event_t)); | |
42 ngx_memzero(&ngx_write_events[s], sizeof(ngx_event_t)); | |
43 ngx_memzero(&ngx_connections[s], sizeof(ngx_connection_t)); | |
44 | |
45 ngx_read_events[s].data = ngx_write_events[s].data | |
46 = &ngx_connections[s]; | |
47 ngx_connections[s].read = &ngx_read_events[s]; | |
48 ngx_connections[s].write = &ngx_write_events[s]; | |
49 | |
50 ngx_connections[s].fd = s; | |
51 ngx_read_events[s].unexpected_eof = 1; | |
52 ngx_write_events[s].ready = 1; | |
53 | |
54 ngx_write_events[s].timer = ngx_read_events[s].timer = 10000; | |
55 | |
56 ngx_write_events[s].timer_handler = | |
57 ngx_read_events[s].timer_handler = ngx_event_close; | |
58 | |
59 ngx_write_events[s].close_handler = | |
60 ngx_read_events[s].close_handler = ngx_event_close; | |
61 | |
62 ngx_connections[s].server = cn->server; | |
63 ngx_connections[s].servers = cn->servers; | |
64 ngx_connections[s].log = | |
65 ngx_read_events[s].log = ngx_write_events[s].log = ev->log; | |
66 | |
67 #if (HAVE_DEFERRED_ACCEPT) | |
68 if (ev->accept_filter) | |
69 ngx_read_events[s].ready = 1; | |
70 #endif | |
71 | |
72 cn->server->handler(&ngx_connections[s]); | |
73 | |
74 #if (HAVE_KQUEUE) | |
75 #if !(USE_KQUEUE) | |
76 if (ngx_event_type == NGX_KQUEUE_EVENT) | |
77 #endif | |
78 ev->available--; | |
79 #endif | |
80 } while (ev->available); | |
81 | |
82 return 0; | |
83 } |