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 }