static ngx_int_t ngx_http_add_addresses(ngx_conf_t *cf,
ngx_http_core_srv_conf_t *cscf, ngx_http_conf_port_t *port,
- ngx_http_listen_t *listen);
+ ngx_http_listen_opt_t *lsopt);
static ngx_int_t ngx_http_add_address(ngx_conf_t *cf,
ngx_http_core_srv_conf_t *cscf, ngx_http_conf_port_t *port,
- ngx_http_listen_t *listen);
+ ngx_http_listen_opt_t *lsopt);
static ngx_int_t ngx_http_add_server(ngx_conf_t *cf,
ngx_http_core_srv_conf_t *cscf, ngx_http_conf_addr_t *addr);
ngx_int_t
ngx_http_add_listen(ngx_conf_t *cf, ngx_http_core_srv_conf_t *cscf,
- ngx_http_listen_t *listen)
+ ngx_http_listen_opt_t *lsopt)
{
in_port_t p;
ngx_uint_t i;
}
}
- sa = (struct sockaddr *) &listen->sockaddr;
+ sa = (struct sockaddr *) &lsopt->sockaddr;
switch (sa->sa_family) {
/* a port is already in the port list */
- return ngx_http_add_addresses(cf, cscf, &port[i], listen);
+ return ngx_http_add_addresses(cf, cscf, &port[i], lsopt);
}
/* add a port to the port list */
port->port = p;
port->addrs.elts = NULL;
- return ngx_http_add_address(cf, cscf, port, listen);
+ return ngx_http_add_address(cf, cscf, port, lsopt);
}
static ngx_int_t
ngx_http_add_addresses(ngx_conf_t *cf, ngx_http_core_srv_conf_t *cscf,
- ngx_http_conf_port_t *port, ngx_http_listen_t *listen)
+ ngx_http_conf_port_t *port, ngx_http_listen_opt_t *lsopt)
{
u_char *p;
size_t len, off;
* may fill some fields in inherited sockaddr struct's
*/
- sa = (struct sockaddr *) &listen->sockaddr;
+ sa = (struct sockaddr *) &lsopt->sockaddr;
switch (sa->sa_family) {
break;
}
- p = listen->sockaddr + off;
+ p = lsopt->sockaddr + off;
addr = port->addrs.elts;
for (i = 0; i < port->addrs.nelts; i++) {
- if (ngx_memcmp(p, (u_char *) addr[i].sockaddr + off, len) != 0) {
+ if (ngx_memcmp(p, (u_char *) addr[i].opt.sockaddr + off, len) != 0) {
continue;
}
/* check the duplicate "default" server for this address:port */
- if (listen->opt.default_server) {
+ if (lsopt->default_server) {
if (addr[i].opt.default_server) {
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
return NGX_ERROR;
}
+ addr[i].opt = *lsopt;
addr[i].core_srv_conf = cscf;
- addr[i].opt = listen->opt;
}
return NGX_OK;
/* add the address to the addresses list that bound to this port */
- return ngx_http_add_address(cf, cscf, port, listen);
+ return ngx_http_add_address(cf, cscf, port, lsopt);
}
static ngx_int_t
ngx_http_add_address(ngx_conf_t *cf, ngx_http_core_srv_conf_t *cscf,
- ngx_http_conf_port_t *port, ngx_http_listen_t *listen)
+ ngx_http_conf_port_t *port, ngx_http_listen_opt_t *lsopt)
{
ngx_http_conf_addr_t *addr;
return NGX_ERROR;
}
- ngx_memcpy(addr->sockaddr, listen->sockaddr, listen->socklen);
- addr->socklen = listen->socklen;
+ addr->opt = *lsopt;
addr->hash.buckets = NULL;
addr->hash.size = 0;
addr->wc_head = NULL;
#endif
addr->core_srv_conf = cscf;
addr->servers.elts = NULL;
- addr->opt = listen->opt;
return ngx_http_add_server(cf, cscf, addr);
}
ngx_http_core_loc_conf_t *clcf;
ngx_http_core_srv_conf_t *cscf;
- ls = ngx_create_listening(cf, addr->sockaddr, addr->socklen);
+ ls = ngx_create_listening(cf, addr->opt.sockaddr, addr->opt.socklen);
if (ls == NULL) {
return NULL;
}
for (i = 0; i < hport->naddrs; i++) {
- sin = (struct sockaddr_in *) addr[i].sockaddr;
+ sin = (struct sockaddr_in *) addr[i].opt.sockaddr;
addrs[i].addr = sin->sin_addr.s_addr;
addrs[i].conf.core_srv_conf = addr[i].core_srv_conf;
#if (NGX_HTTP_SSL)
for (i = 0; i < hport->naddrs; i++) {
- sin6 = (struct sockaddr_in6 *) addr[i].sockaddr;
+ sin6 = (struct sockaddr_in6 *) addr[i].opt.sockaddr;
addrs6[i].addr6 = sin6->sin6_addr;
addrs6[i].conf.core_srv_conf = addr[i].core_srv_conf;
#if (NGX_HTTP_SSL)
ngx_http_core_srv_conf_t *prev = parent;
ngx_http_core_srv_conf_t *conf = child;
- ngx_http_listen_t ls;
struct sockaddr_in *sin;
+ ngx_http_listen_opt_t lsopt;
ngx_http_server_name_t *sn;
/* TODO: it does not merge, it inits only */
if (!conf->listen) {
- ngx_memzero(&ls, sizeof(ngx_http_listen_t));
+ ngx_memzero(&lsopt, sizeof(ngx_http_listen_opt_t));
- sin = (struct sockaddr_in *) &ls.sockaddr;
+ sin = (struct sockaddr_in *) &lsopt.sockaddr;
sin->sin_family = AF_INET;
#if (NGX_WIN32)
#endif
sin->sin_addr.s_addr = INADDR_ANY;
- ls.socklen = sizeof(struct sockaddr_in);
+ lsopt.socklen = sizeof(struct sockaddr_in);
- ls.opt.backlog = NGX_LISTEN_BACKLOG;
- ls.opt.rcvbuf = -1;
- ls.opt.sndbuf = -1;
- ls.opt.wildcard = 1;
+ lsopt.backlog = NGX_LISTEN_BACKLOG;
+ lsopt.rcvbuf = -1;
+ lsopt.sndbuf = -1;
+ lsopt.wildcard = 1;
- (void) ngx_sock_ntop((struct sockaddr *) &ls.sockaddr, ls.opt.addr,
+ (void) ngx_sock_ntop((struct sockaddr *) &lsopt.sockaddr, lsopt.addr,
NGX_SOCKADDR_STRLEN, 1);
- if (ngx_http_add_listen(cf, conf, &ls) == NGX_OK) {
+ if (ngx_http_add_listen(cf, conf, &lsopt) == NGX_OK) {
return NGX_CONF_OK;
}
}
{
ngx_http_core_srv_conf_t *cscf = conf;
- ngx_str_t *value, size;
- ngx_url_t u;
- ngx_uint_t n;
- ngx_http_listen_t ls;
+ ngx_str_t *value, size;
+ ngx_url_t u;
+ ngx_uint_t n;
+ ngx_http_listen_opt_t lsopt;
cscf->listen = 1;
return NGX_CONF_ERROR;
}
- ngx_memzero(&ls, sizeof(ngx_http_listen_t));
+ ngx_memzero(&lsopt, sizeof(ngx_http_listen_opt_t));
- ngx_memcpy(ls.sockaddr, u.sockaddr, u.socklen);
+ ngx_memcpy(lsopt.sockaddr, u.sockaddr, u.socklen);
- ls.socklen = u.socklen;
- ls.opt.backlog = NGX_LISTEN_BACKLOG;
- ls.opt.rcvbuf = -1;
- ls.opt.sndbuf = -1;
- ls.opt.wildcard = u.wildcard;
+ lsopt.socklen = u.socklen;
+ lsopt.backlog = NGX_LISTEN_BACKLOG;
+ lsopt.rcvbuf = -1;
+ lsopt.sndbuf = -1;
+ lsopt.wildcard = u.wildcard;
- (void) ngx_sock_ntop((struct sockaddr *) &ls.sockaddr, ls.opt.addr,
+ (void) ngx_sock_ntop((struct sockaddr *) &lsopt.sockaddr, lsopt.addr,
NGX_SOCKADDR_STRLEN, 1);
if (cf->args->nelts > 2 && ngx_strcmp(value[2].data, "default") == 0) {
- ls.opt.default_server = 1;
+ lsopt.default_server = 1;
n = 3;
} else {
for ( /* void */ ; n < cf->args->nelts; n++) {
- if (ls.opt.default_server == 0) {
+ if (lsopt.default_server == 0) {
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
"\"%V\" parameter can be specified for "
"the default \"listen\" directive only",
}
if (ngx_strcmp(value[n].data, "bind") == 0) {
- ls.opt.bind = 1;
+ lsopt.bind = 1;
continue;
}
if (ngx_strncmp(value[n].data, "backlog=", 8) == 0) {
- ls.opt.backlog = ngx_atoi(value[n].data + 8, value[n].len - 8);
- ls.opt.bind = 1;
+ lsopt.backlog = ngx_atoi(value[n].data + 8, value[n].len - 8);
+ lsopt.bind = 1;
- if (ls.opt.backlog == NGX_ERROR || ls.opt.backlog == 0) {
+ if (lsopt.backlog == NGX_ERROR || lsopt.backlog == 0) {
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
"invalid backlog \"%V\"", &value[n]);
return NGX_CONF_ERROR;
size.len = value[n].len - 7;
size.data = value[n].data + 7;
- ls.opt.rcvbuf = ngx_parse_size(&size);
- ls.opt.bind = 1;
+ lsopt.rcvbuf = ngx_parse_size(&size);
+ lsopt.bind = 1;
- if (ls.opt.rcvbuf == NGX_ERROR) {
+ if (lsopt.rcvbuf == NGX_ERROR) {
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
"invalid rcvbuf \"%V\"", &value[n]);
return NGX_CONF_ERROR;
size.len = value[n].len - 7;
size.data = value[n].data + 7;
- ls.opt.sndbuf = ngx_parse_size(&size);
- ls.opt.bind = 1;
+ lsopt.sndbuf = ngx_parse_size(&size);
+ lsopt.bind = 1;
- if (ls.opt.sndbuf == NGX_ERROR) {
+ if (lsopt.sndbuf == NGX_ERROR) {
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
"invalid sndbuf \"%V\"", &value[n]);
return NGX_CONF_ERROR;
if (ngx_strncmp(value[n].data, "accept_filter=", 14) == 0) {
#if (NGX_HAVE_DEFERRED_ACCEPT && defined SO_ACCEPTFILTER)
- ls.opt.accept_filter = (char *) &value[n].data[14];
- ls.opt.bind = 1;
+ lsopt.accept_filter = (char *) &value[n].data[14];
+ lsopt.bind = 1;
#else
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
"accept filters \"%V\" are not supported "
if (ngx_strcmp(value[n].data, "deferred") == 0) {
#if (NGX_HAVE_DEFERRED_ACCEPT && defined TCP_DEFER_ACCEPT)
- ls.opt.deferred_accept = 1;
- ls.opt.bind = 1;
+ lsopt.deferred_accept = 1;
+ lsopt.bind = 1;
#else
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
"the deferred accept is not supported "
#if (NGX_HAVE_INET6 && defined IPV6_V6ONLY)
struct sockaddr *sa;
- sa = (struct sockaddr *) ls.sockaddr;
+ sa = (struct sockaddr *) lsopt.sockaddr;
if (sa->sa_family == AF_INET6) {
if (ngx_strcmp(&value[n].data[10], "n") == 0) {
- ls.opt.ipv6only = 1;
+ lsopt.ipv6only = 1;
} else if (ngx_strcmp(&value[n].data[10], "ff") == 0) {
- ls.opt.ipv6only = 2;
+ lsopt.ipv6only = 2;
} else {
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
return NGX_CONF_ERROR;
}
- ls.opt.bind = 1;
+ lsopt.bind = 1;
} else {
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
"ipv6only is not supported "
- "on addr \"%s\", ignored", ls.opt.addr);
+ "on addr \"%s\", ignored", lsopt.addr);
}
continue;
if (ngx_strcmp(value[n].data, "ssl") == 0) {
#if (NGX_HTTP_SSL)
- ls.opt.ssl = 1;
+ lsopt.ssl = 1;
continue;
#else
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
return NGX_CONF_ERROR;
}
- if (ngx_http_add_listen(cf, cscf, &ls) == NGX_OK) {
+ if (ngx_http_add_listen(cf, cscf, &lsopt) == NGX_OK) {
return NGX_CONF_OK;
}