diff options
author | Igor Sysoev <igor@sysoev.ru> | 2009-05-05 17:33:26 +0000 |
---|---|---|
committer | Igor Sysoev <igor@sysoev.ru> | 2009-05-05 17:33:26 +0000 |
commit | ee4be0345fc2a62fcc0544ebed52523fdf2ffe40 (patch) | |
tree | b9f15294e0feb62cde68fff0b784c632832a99a3 /src/core/ngx_connection.c | |
parent | 25870d8ea2c5b20de974c88ff2cc30bcd7d401bd (diff) | |
download | nginx-ee4be0345fc2a62fcc0544ebed52523fdf2ffe40.tar.gz nginx-ee4be0345fc2a62fcc0544ebed52523fdf2ffe40.zip |
ngx_create_listening()
Diffstat (limited to 'src/core/ngx_connection.c')
-rw-r--r-- | src/core/ngx_connection.c | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/src/core/ngx_connection.c b/src/core/ngx_connection.c index 5dd1b7e23..a743dbbed 100644 --- a/src/core/ngx_connection.c +++ b/src/core/ngx_connection.c @@ -12,6 +12,64 @@ ngx_os_io_t ngx_io; +ngx_listening_t * +ngx_create_listening(ngx_conf_t *cf, void *sockaddr, socklen_t socklen) +{ + ngx_listening_t *ls; + struct sockaddr *sa; + u_char text[NGX_SOCKADDR_STRLEN]; + + ls = ngx_array_push(&cf->cycle->listening); + if (ls == NULL) { + return NULL; + } + + ngx_memzero(ls, sizeof(ngx_listening_t)); + + sa = ngx_palloc(cf->pool, socklen); + if (sa == NULL) { + return NULL; + } + + ngx_memcpy(sa, sockaddr, socklen); + + ls->sockaddr = sa; + ls->socklen = socklen; + + ls->addr_text.len = ngx_sock_ntop(sa, text, NGX_SOCKADDR_STRLEN, 1); + + ls->addr_text.data = ngx_pnalloc(cf->pool, ls->addr_text.len); + if (ls->addr_text.data == NULL) { + return NULL; + } + + ngx_memcpy(ls->addr_text.data, text, ls->addr_text.len); + + ls->fd = (ngx_socket_t) -1; + ls->type = SOCK_STREAM; + + switch (ls->sockaddr->sa_family) { +#if (NGX_HAVE_INET6) + case AF_INET6: + ls->addr_text_max_len = NGX_INET6_ADDRSTRLEN; + break; +#endif + case AF_INET: + ls->addr_text_max_len = NGX_INET_ADDRSTRLEN; + break; + default: + ls->addr_text_max_len = NGX_SOCKADDR_STRLEN; + break; + } + + ls->backlog = NGX_LISTEN_BACKLOG; + ls->rcvbuf = -1; + ls->sndbuf = -1; + + return ls; +} + + ngx_int_t ngx_set_inherited_sockets(ngx_cycle_t *cycle) { |