comparison src/event/ngx_event_accept.c @ 4613:9ee20e074a2e

debug_connection: added the IPv6 and UNIX-domain socket support.
author Ruslan Ermilov <ru@nginx.com>
date Sun, 29 Apr 2012 22:02:18 +0000
parents d620f497c50f
children c05cfc46b3bc
comparison
equal deleted inserted replaced
4612:c42553296af1 4613:9ee20e074a2e
250 } 250 }
251 251
252 #if (NGX_DEBUG) 252 #if (NGX_DEBUG)
253 { 253 {
254 254
255 in_addr_t i; 255 struct sockaddr_in *sin;
256 ngx_event_debug_t *dc; 256 ngx_cidr_t *cidr;
257 struct sockaddr_in *sin; 257 ngx_uint_t i;
258 258 #if (NGX_HAVE_INET6)
259 sin = (struct sockaddr_in *) sa; 259 struct sockaddr_in6 *sin6;
260 dc = ecf->debug_connection.elts; 260 ngx_uint_t n;
261 #endif
262
263 cidr = ecf->debug_connection.elts;
261 for (i = 0; i < ecf->debug_connection.nelts; i++) { 264 for (i = 0; i < ecf->debug_connection.nelts; i++) {
262 if ((sin->sin_addr.s_addr & dc[i].mask) == dc[i].addr) { 265 if (cidr[i].family != c->sockaddr->sa_family) {
263 log->log_level = NGX_LOG_DEBUG_CONNECTION|NGX_LOG_DEBUG_ALL; 266 goto next;
267 }
268
269 switch (cidr[i].family) {
270
271 #if (NGX_HAVE_INET6)
272 case AF_INET6:
273 sin6 = (struct sockaddr_in6 *) c->sockaddr;
274 for (n = 0; n < 16; n++) {
275 if ((sin6->sin6_addr.s6_addr[n]
276 & cidr[i].u.in6.mask.s6_addr[n])
277 != cidr[i].u.in6.addr.s6_addr[n])
278 {
279 goto next;
280 }
281 }
264 break; 282 break;
265 } 283 #endif
284
285 #if (NGX_HAVE_UNIX_DOMAIN)
286 case AF_UNIX:
287 break;
288 #endif
289
290 default: /* AF_INET */
291 sin = (struct sockaddr_in *) c->sockaddr;
292 if ((sin->sin_addr.s_addr & cidr[i].u.in.mask)
293 != cidr[i].u.in.addr)
294 {
295 goto next;
296 }
297 break;
298 }
299
300 log->log_level = NGX_LOG_DEBUG_CONNECTION|NGX_LOG_DEBUG_ALL;
301 break;
302
303 next:
304 continue;
266 } 305 }
267 306
268 } 307 }
269 #endif 308 #endif
270 309