Mercurial > hg > nginx
comparison src/core/ngx_connection.c @ 3230:a7491af45540
http listen unix domain sockets
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Mon, 26 Oct 2009 11:43:32 +0000 |
parents | ad3ddfd06e7d |
children | a6df0624203c |
comparison
equal
deleted
inserted
replaced
3229:a632dc9f3e73 | 3230:a7491af45540 |
---|---|
13 | 13 |
14 | 14 |
15 ngx_listening_t * | 15 ngx_listening_t * |
16 ngx_create_listening(ngx_conf_t *cf, void *sockaddr, socklen_t socklen) | 16 ngx_create_listening(ngx_conf_t *cf, void *sockaddr, socklen_t socklen) |
17 { | 17 { |
18 size_t len; | |
18 ngx_listening_t *ls; | 19 ngx_listening_t *ls; |
19 struct sockaddr *sa; | 20 struct sockaddr *sa; |
20 u_char text[NGX_SOCKADDR_STRLEN]; | 21 u_char text[NGX_SOCKADDR_STRLEN]; |
21 | 22 |
22 ls = ngx_array_push(&cf->cycle->listening); | 23 ls = ngx_array_push(&cf->cycle->listening); |
34 ngx_memcpy(sa, sockaddr, socklen); | 35 ngx_memcpy(sa, sockaddr, socklen); |
35 | 36 |
36 ls->sockaddr = sa; | 37 ls->sockaddr = sa; |
37 ls->socklen = socklen; | 38 ls->socklen = socklen; |
38 | 39 |
39 ls->addr_text.len = ngx_sock_ntop(sa, text, NGX_SOCKADDR_STRLEN, 1); | 40 len = ngx_sock_ntop(sa, text, NGX_SOCKADDR_STRLEN, 1); |
40 | 41 ls->addr_text.len = len; |
41 ls->addr_text.data = ngx_pnalloc(cf->pool, ls->addr_text.len); | |
42 if (ls->addr_text.data == NULL) { | |
43 return NULL; | |
44 } | |
45 | |
46 ngx_memcpy(ls->addr_text.data, text, ls->addr_text.len); | |
47 | |
48 ls->fd = (ngx_socket_t) -1; | |
49 ls->type = SOCK_STREAM; | |
50 | 42 |
51 switch (ls->sockaddr->sa_family) { | 43 switch (ls->sockaddr->sa_family) { |
52 #if (NGX_HAVE_INET6) | 44 #if (NGX_HAVE_INET6) |
53 case AF_INET6: | 45 case AF_INET6: |
54 ls->addr_text_max_len = NGX_INET6_ADDRSTRLEN; | 46 ls->addr_text_max_len = NGX_INET6_ADDRSTRLEN; |
47 break; | |
48 #endif | |
49 #if (NGX_HAVE_UNIX_DOMAIN) | |
50 case AF_UNIX: | |
51 ls->addr_text_max_len = NGX_UNIX_ADDRSTRLEN; | |
52 len++; | |
55 break; | 53 break; |
56 #endif | 54 #endif |
57 case AF_INET: | 55 case AF_INET: |
58 ls->addr_text_max_len = NGX_INET_ADDRSTRLEN; | 56 ls->addr_text_max_len = NGX_INET_ADDRSTRLEN; |
59 break; | 57 break; |
60 default: | 58 default: |
61 ls->addr_text_max_len = NGX_SOCKADDR_STRLEN; | 59 ls->addr_text_max_len = NGX_SOCKADDR_STRLEN; |
62 break; | 60 break; |
63 } | 61 } |
62 | |
63 ls->addr_text.data = ngx_pnalloc(cf->pool, len); | |
64 if (ls->addr_text.data == NULL) { | |
65 return NULL; | |
66 } | |
67 | |
68 ngx_memcpy(ls->addr_text.data, text, len); | |
69 | |
70 ls->fd = (ngx_socket_t) -1; | |
71 ls->type = SOCK_STREAM; | |
64 | 72 |
65 ls->backlog = NGX_LISTEN_BACKLOG; | 73 ls->backlog = NGX_LISTEN_BACKLOG; |
66 ls->rcvbuf = -1; | 74 ls->rcvbuf = -1; |
67 ls->sndbuf = -1; | 75 ls->sndbuf = -1; |
68 | 76 |
601 | 609 |
602 if (ngx_close_socket(ls[i].fd) == -1) { | 610 if (ngx_close_socket(ls[i].fd) == -1) { |
603 ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_socket_errno, | 611 ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_socket_errno, |
604 ngx_close_socket_n " %V failed", &ls[i].addr_text); | 612 ngx_close_socket_n " %V failed", &ls[i].addr_text); |
605 } | 613 } |
614 | |
615 #if (NGX_HAVE_UNIX_DOMAIN) | |
616 | |
617 if (ls[i].sockaddr->sa_family == AF_UNIX | |
618 && ngx_process != NGX_PROCESS_WORKER) | |
619 { | |
620 u_char *name = ls[i].addr_text.data + sizeof("unix:") - 1; | |
621 | |
622 if (ngx_delete_file(name) == -1) { | |
623 ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_socket_errno, | |
624 ngx_delete_file_n " %s failed", name); | |
625 } | |
626 } | |
627 | |
628 #endif | |
606 | 629 |
607 ls[i].fd = (ngx_socket_t) -1; | 630 ls[i].fd = (ngx_socket_t) -1; |
608 } | 631 } |
609 } | 632 } |
610 | 633 |