Mercurial > hg > nginx-quic
comparison src/core/ngx_connection.c @ 219:f57597ec5249
nginx-0.0.1-2004-01-06-19:49:34 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Tue, 06 Jan 2004 16:49:34 +0000 |
parents | 05592fd7a436 |
children | 86e473b5641e |
comparison
equal
deleted
inserted
replaced
218:05592fd7a436 | 219:f57597ec5249 |
---|---|
1 | 1 |
2 #include <ngx_config.h> | 2 #include <ngx_config.h> |
3 #include <ngx_core.h> | 3 #include <ngx_core.h> |
4 #include <ngx_event.h> | 4 #include <ngx_event.h> |
5 /* STUB */ | |
6 #include <nginx.h> | |
7 | 5 |
8 | 6 |
9 ngx_os_io_t ngx_io; | 7 ngx_os_io_t ngx_io; |
10 | 8 |
11 | 9 |
12 ngx_int_t ngx_set_inherited_sockets(ngx_cycle_t *cycle, char **envp) | 10 ngx_int_t ngx_set_inherited_sockets(ngx_cycle_t *cycle) |
13 { | 11 { |
14 char *p, *v; | 12 ngx_int_t i; |
15 ngx_socket_t s; | |
16 ngx_listening_t *ls; | 13 ngx_listening_t *ls; |
17 struct sockaddr_in *addr_in; | 14 struct sockaddr_in *addr_in; |
18 | 15 |
19 for ( /* void */ ; *envp; envp++) { | 16 ls = cycle->listening.elts; |
20 if (ngx_strncmp(*envp, NGINX_VAR, NGINX_VAR_LEN) != 0) { | 17 for (i = 0; i < cycle->listening.nelts; i++) { |
18 | |
19 /* AF_INET only */ | |
20 | |
21 ls[i].sockaddr = ngx_palloc(cycle->pool, sizeof(struct sockaddr_in)); | |
22 if (ls[i].sockaddr == NULL) { | |
23 return NGX_ERROR; | |
24 } | |
25 | |
26 ls[i].socklen = sizeof(struct sockaddr_in); | |
27 if (getsockname(ls[i].fd, ls[i].sockaddr, &ls[i].socklen) == -1) { | |
28 ngx_log_error(NGX_LOG_CRIT, cycle->log, ngx_socket_errno, | |
29 "getsockname() of the inherited " | |
30 "socket #%d failed", ls[i].fd); | |
31 ls[i].ignore = 1; | |
21 continue; | 32 continue; |
22 } | 33 } |
23 | 34 |
24 ngx_log_error(NGX_LOG_INFO, cycle->log, 0, | 35 addr_in = (struct sockaddr_in *) ls[i].sockaddr; |
25 "using inherited sockets from \"%s\"", *envp); | 36 |
26 | 37 if (addr_in->sin_family != AF_INET) { |
27 ngx_init_array(cycle->listening, cycle->pool, | 38 ngx_log_error(NGX_LOG_CRIT, cycle->log, ngx_socket_errno, |
28 10, sizeof(ngx_listening_t), NGX_ERROR); | 39 "the inherited socket #%d has " |
29 | 40 "unsupported family", ls[i].fd); |
30 for (p = *envp + NGINX_VAR_LEN, v = p; *p; p++) { | 41 ls[i].ignore = 1; |
31 if (*p == ':' || *p == ';') { | 42 continue; |
32 s = ngx_atoi(v, p - v); | 43 } |
33 if (s == NGX_ERROR) { | 44 ls[i].addr_text_max_len = INET_ADDRSTRLEN; |
34 ngx_log_error(NGX_LOG_EMERG, cycle->log, 0, | 45 |
35 "invalid socket number \"%s\" " | 46 ls[i].addr_text.data = ngx_palloc(cycle->pool, ls[i].addr_text_max_len); |
36 "in NGINX enviroment variable, " | 47 if (ls[i].addr_text.data == NULL) { |
37 "ignoring the rest of the variable", v); | 48 return NGX_ERROR; |
38 break; | 49 } |
39 } | 50 |
40 v = p + 1; | 51 addr_in->sin_len = 0; |
41 | 52 |
42 if (!(ls = ngx_push_array(&cycle->listening))) { | 53 ls[i].family = addr_in->sin_family; |
43 return NGX_ERROR; | 54 ls[i].addr_text.len = ngx_sock_ntop(ls[i].family, ls[i].sockaddr, |
44 } | 55 ls[i].addr_text.data, |
45 | 56 ls[i].addr_text_max_len); |
46 ls->fd = s; | 57 if (ls[i].addr_text.len == 0) { |
47 | 58 return NGX_ERROR; |
48 /* AF_INET only */ | 59 } |
49 | |
50 ls->sockaddr = ngx_palloc(cycle->pool, | |
51 sizeof(struct sockaddr_in)); | |
52 if (ls->sockaddr == NULL) { | |
53 return NGX_ERROR; | |
54 } | |
55 | |
56 ls->socklen = sizeof(struct sockaddr_in); | |
57 if (getsockname(s, ls->sockaddr, &ls->socklen) == -1) { | |
58 ngx_log_error(NGX_LOG_CRIT, cycle->log, ngx_socket_errno, | |
59 "getsockname() of the inherited " | |
60 "socket #%d failed", s); | |
61 ls->ignore = 1; | |
62 continue; | |
63 } | |
64 | |
65 addr_in = (struct sockaddr_in *) ls->sockaddr; | |
66 | |
67 if (addr_in->sin_family != AF_INET) { | |
68 ngx_log_error(NGX_LOG_CRIT, cycle->log, ngx_socket_errno, | |
69 "the inherited socket #%d has " | |
70 "unsupported family", s); | |
71 ls->ignore = 1; | |
72 continue; | |
73 } | |
74 ls->addr_text_max_len = INET_ADDRSTRLEN; | |
75 | |
76 ls->addr_text.data = ngx_palloc(cycle->pool, | |
77 ls->addr_text_max_len); | |
78 if (ls->addr_text.data == NULL) { | |
79 return NGX_ERROR; | |
80 } | |
81 | |
82 addr_in->sin_len = 0; | |
83 | |
84 ls->family = addr_in->sin_family; | |
85 ls->addr_text.len = ngx_sock_ntop(ls->family, ls->sockaddr, | |
86 ls->addr_text.data, | |
87 ls->addr_text_max_len); | |
88 if (ls->addr_text.len == 0) { | |
89 return NGX_ERROR; | |
90 } | |
91 } | |
92 } | |
93 | |
94 break; | |
95 } | 60 } |
96 | 61 |
97 return NGX_OK; | 62 return NGX_OK; |
98 } | 63 } |
99 | 64 |