comparison src/core/ngx_connection.c @ 550:1dcf6adad484 NGINX_0_8_21

nginx 0.8.21 *) Feature: now the "-V" switch shows TLS SNI support. *) Feature: the "listen" directive of the HTTP module supports unix domain sockets. Thanks to Hongli Lai. *) Feature: the "default_server" parameter of the "listen" directive. *) Feature: now a "default" parameter is not required to set listen socket options. *) Bugfix: nginx did not support dates in 2038 year on 32-bit platforms; *) Bugfix: socket leak; the bug had appeared in 0.8.11.
author Igor Sysoev <http://sysoev.ru>
date Mon, 26 Oct 2009 00:00:00 +0300
parents 4c5d2c627a6c
children c04fa65fe604
comparison
equal deleted inserted replaced
549:3ca2e495d9de 550:1dcf6adad484
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