Mercurial > hg > nginx-mail
comparison src/core/ngx_connection.c @ 487:76a79816b771 NGINX_0_7_36
nginx 0.7.36
*) Feature: a preliminary IPv6 support; the "listen" directive of the
HTTP module supports IPv6.
*) Bugfix: the $ancient_browser variable did not work for browsers
preset by a "modern_browser" directives.
author | Igor Sysoev <http://sysoev.ru> |
---|---|
date | Sat, 21 Feb 2009 00:00:00 +0300 |
parents | b246022ef454 |
children | bb941a2996a6 |
comparison
equal
deleted
inserted
replaced
486:40964c811e59 | 487:76a79816b771 |
---|---|
50 | 50 |
51 ls->fd = (ngx_socket_t) -1; | 51 ls->fd = (ngx_socket_t) -1; |
52 ls->type = SOCK_STREAM; | 52 ls->type = SOCK_STREAM; |
53 ls->sockaddr = (struct sockaddr *) sin; | 53 ls->sockaddr = (struct sockaddr *) sin; |
54 ls->socklen = sizeof(struct sockaddr_in); | 54 ls->socklen = sizeof(struct sockaddr_in); |
55 ls->addr = offsetof(struct sockaddr_in, sin_addr); | |
56 ls->addr_text_max_len = NGX_INET_ADDRSTRLEN; | 55 ls->addr_text_max_len = NGX_INET_ADDRSTRLEN; |
57 | 56 |
58 return ls; | 57 return ls; |
59 } | 58 } |
60 | 59 |
63 ngx_set_inherited_sockets(ngx_cycle_t *cycle) | 62 ngx_set_inherited_sockets(ngx_cycle_t *cycle) |
64 { | 63 { |
65 size_t len; | 64 size_t len; |
66 ngx_uint_t i; | 65 ngx_uint_t i; |
67 ngx_listening_t *ls; | 66 ngx_listening_t *ls; |
68 struct sockaddr_in *sin; | |
69 socklen_t olen; | 67 socklen_t olen; |
70 #if (NGX_HAVE_DEFERRED_ACCEPT && defined SO_ACCEPTFILTER) | 68 #if (NGX_HAVE_DEFERRED_ACCEPT && defined SO_ACCEPTFILTER) |
71 ngx_err_t err; | 69 ngx_err_t err; |
72 struct accept_filter_arg af; | 70 struct accept_filter_arg af; |
73 #endif | 71 #endif |
92 "socket #%d failed", ls[i].fd); | 90 "socket #%d failed", ls[i].fd); |
93 ls[i].ignore = 1; | 91 ls[i].ignore = 1; |
94 continue; | 92 continue; |
95 } | 93 } |
96 | 94 |
97 sin = (struct sockaddr_in *) ls[i].sockaddr; | 95 switch (ls[i].sockaddr->sa_family) { |
98 | 96 |
99 if (sin->sin_family != AF_INET) { | 97 #if (NGX_HAVE_INET6) |
98 case AF_INET6: | |
99 ls[i].addr_text_max_len = NGX_INET6_ADDRSTRLEN; | |
100 break; | |
101 #endif | |
102 | |
103 case AF_INET: | |
104 ls[i].addr_text_max_len = NGX_INET_ADDRSTRLEN; | |
105 break; | |
106 | |
107 default: | |
100 ngx_log_error(NGX_LOG_CRIT, cycle->log, ngx_socket_errno, | 108 ngx_log_error(NGX_LOG_CRIT, cycle->log, ngx_socket_errno, |
101 "the inherited socket #%d has " | 109 "the inherited socket #%d has " |
102 "unsupported family", ls[i].fd); | 110 "an unsupported protocol family", ls[i].fd); |
103 ls[i].ignore = 1; | 111 ls[i].ignore = 1; |
104 continue; | 112 continue; |
105 } | 113 } |
106 | 114 |
107 ls[i].addr_text_max_len = NGX_INET_ADDRSTRLEN; | 115 len = ls[i].addr_text_max_len + sizeof(":65535") - 1; |
108 | 116 |
109 ls[i].addr_text.data = ngx_pnalloc(cycle->pool, | 117 ls[i].addr_text.data = ngx_pnalloc(cycle->pool, len); |
110 NGX_INET_ADDRSTRLEN + sizeof(":65535") - 1); | |
111 if (ls[i].addr_text.data == NULL) { | 118 if (ls[i].addr_text.data == NULL) { |
112 return NGX_ERROR; | 119 return NGX_ERROR; |
113 } | 120 } |
114 | 121 |
115 len = ngx_sock_ntop(ls[i].sockaddr, ls[i].addr_text.data, | 122 len = ngx_sock_ntop(ls[i].sockaddr, ls[i].addr_text.data, len, 1); |
116 NGX_INET_ADDRSTRLEN); | |
117 if (len == 0) { | 123 if (len == 0) { |
118 return NGX_ERROR; | 124 return NGX_ERROR; |
119 } | 125 } |
120 | 126 |
121 ls[i].addr_text.len = ngx_sprintf(ls[i].addr_text.data + len, ":%d", | 127 ls[i].addr_text.len = len; |
122 ntohs(sin->sin_port)) | |
123 - ls[i].addr_text.data; | |
124 | 128 |
125 ls[i].backlog = NGX_LISTEN_BACKLOG; | 129 ls[i].backlog = NGX_LISTEN_BACKLOG; |
126 | 130 |
127 olen = sizeof(int); | 131 olen = sizeof(int); |
128 | 132 |