comparison src/core/ngx_connection.c @ 448: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
447:40964c811e59 448: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