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